본문 바로가기

Algorithm Problems/완전 탐색

[백준/Python] 15970번: 화살표 그리기

문제

https://www.acmicpc.net/problem/15970

 

15970번: 화살표 그리기

직선 위에 위치를 나타내는 0, 1, 2, ...와 같은 음수가 아닌 정수들이 일정한 간격으로 오른쪽 방향으로 놓여 있다. 이러한 위치들 중 N개의 위치에 하나씩 점들이 주어진다(<그림 1>). 주어진 점들

www.acmicpc.net


문제 요약

수직선 위에 위치를 나타내는 음이 아닌 정수들이 일정한 간격으로 오른쪽 방향으로 놓여 있다.

 

N개의 위치에 하나씩 점들이 주어진다.

 

각 점들이 가장 가까운 거리의 점에 화살표로 연결된다고 할 때, 각 점들의 화살표 길이의 합을 출력한다.

 

+ 가작 가까운 거리가 두 개 이상이라면 아무거나 하나를 선택한다.


코드

N = int(input())

arr = [[] for _ in range(N)]

# 같은 색끼리 같은 배열에 좌표 저장
for i in range(N):
    i_loc, i_color = map(int, input().split())
    arr[i_color - 1].append(i_loc)

ans = 0

for color in arr:
    for num in color:
        near_idx = 100001 # num과 가장 가까운 인덱스와의 거리 저장
        for a in color:
            if num - a == 0: # 자기 자신과의 거리 비교는 하지 않는다.
                continue
            near_idx = min(near_idx, abs(num - a))

        ans += near_idx

print(ans)

코드 설명

1. 입력 받은 수의 정보를 색에 따라 나누어서 2차원 배열 arr에 저장한다.

 

2. 색에 저장된 수 1개와 같은 색에 저장된 다른 수들과 비교하여 가장 거리가 가까운 값(= 화살표 길이)을 찾는다.

 

3. 화살표 길이의 합을 출력한다,