문제
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. 화살표 길이의 합을 출력한다,
'Algorithm Problems > 완전 탐색' 카테고리의 다른 글
[백준/Python] 3085번: 사탕 게임 (0) | 2023.09.27 |
---|---|
[백준/Python] 1018번: 체스판 다시 칠하기 (2) | 2023.09.26 |
[백준/Python] 2503번: 숫자 야구 (3) | 2023.09.07 |
[백준/Python] 10971번: 외판원 순회 2 (3) | 2023.09.01 |
[백준/Python] 14620번: 꽃길 (2) | 2023.08.31 |