코딩 농장/백준 문제
[백준 Python] 15975번 화살표 그리기
GreenBNN
2022. 5. 22. 20:50
https://www.acmicpc.net/problem/15975
15975번: 화살표 그리기
직선위에 $N$개의 점들이 주어지고 각 점은 $N$개의 색깔 중 하나를 가진다. 편의상, 색깔은 1부터 $N$까지의 수로 표시 하고, 점들의 좌표는 모두 다르다. 각 점 $p$에 대해서, $p$에서 시작하는 직선
www.acmicpc.net
문제이해
수평선에 (좌표, 색) 점이 주어짐
각 점에서 같은 색을 가진 가까운 점의 거리를 구하고 다 더함
문제 풀이 흐름
결국 같은 색의 점들을 오름차순으로 모아둔 다음 양 옆의 가까운 점과 거리를 구하면 된다.
양 끝 점은 바로 옆 놈 더해주면 되고
# 수평선 (좌표, 색)
# 모든 점에 대해 같은 색이며 가장 가까운 점까지의 거리를 구하고
# 다 더함
num = int(input())
arr = []
sum = 0
# 입력 받을 때 공백 제거 방법
for i in range(num):
a, b = map(int, input().split())
arr.append([b, a]) # 색, 좌표
arr.sort() # 색으로 정렬 후 좌표로 정렬
for i in range(0,num):
if i == 0:
if arr[i][0] == arr[i+1][0]: # 다음 있으면
sum += arr[i+1][1] - arr[i][1]
elif i == num-1:
if arr[i][0] == arr[i-1][0]: # 이전 있으면
sum += arr[i][1] - arr[i-1][1]
else:
if arr[i][0] == arr[i+1][0] and arr[i][0] == arr[i-1][0]: # 양쪽이 있으면
if (arr[i+1][1] - arr[i][1]) > (arr[i][1] - arr[i-1][1]): # 더 작은 거리 더하기
sum += arr[i][1] - arr[i-1][1]
else:
sum += arr[i+1][1] - arr[i][1]
elif arr[i][0] == arr[i+1][0]: # 다음 만 있으면
sum += arr[i+1][1] - arr[i][1]
elif arr[i][0] == arr[i-1][0]: # 이전만 있으면
sum += arr[i][1] - arr[i-1][1]
else:
sum += 0
print(sum)