- 알고리즘 유형 : 정렬
- 풀이 참고 : 없음
- 문제 링크 : https://www.acmicpc.net/problem/15970
풀이 요약
정렬 후 예외사항만 잘 체크하면 되는 문제이다.
내가 푼 기본 아이디어는 점의 색깔을 인덱스로 하는 리스트안에 점들을 모아두었다.
코드(python)
n = int(input())
arr = [[] for _ in range(n)]
# 색깔을 인덱스로 갖는 2중 리스트 생성
for i in range(n):
position, color = map(int, input().split())
arr[color-1].append(position)
# 같은 색의 리스트 솔팅
for i in arr:
i.sort()
result = 0
for j in range(len(arr)):
for i in range(len(arr[j])):
# 같은색이 두개밖에 없다면 별도 처리
if len(arr[j]) == 2:
result += (arr[j][i+1] - arr[j][i]) *2
break
# 첫번째 점일때는 한방향의 거리만 계산
if i == 0:
result += (arr[j][i+1] - arr[j][i])
# 마지막이면 별도 처리하고 break
elif arr[j][i] == arr[j][-1]:
result += (arr[j][i] - arr[j][i-1])
break
# 양쪽의 길이를 비교하여 작은 값으로 계산
elif (arr[j][i] - arr[j][i-1]) >= (arr[j][i+1] - arr[j][i]):
result += (arr[j][i+1] - arr[j][i])
else:
result += (arr[j][i] - arr[j][i-1])
print(result)
배운 점, 배울 점
100점이라 기분이 아주 좋았다.
다른 풀이들을 좀더 참고하여 쉬운 방법이 있는지 공부하자
반응형
'Develop > Algorithm' 카테고리의 다른 글
[BOJ]1269_대칭 차집합 (0) | 2023.02.09 |
---|---|
[알고리즘]BOJ_카드_11652 (0) | 2022.12.16 |
[BOJ]14888_연산자 끼워넣기_C언어 (0) | 2022.10.28 |
[BOJ]N과 M (2)_15650 (0) | 2022.10.24 |
[BOJ]N과 M(4)_15672 (0) | 2022.10.23 |