본문 바로가기

Develop/Algorithm

[알고리즘]BOJ_화살표 그리기_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