본문 바로가기

Programming [Python]/백준 알고리즘 솔루션

#279 백준 파이썬 [16678] 모독

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

 

SOLUTION

단순히 총합 한 뒤, 1~N까지 더한 값을 빼준다고 생각한 것은 오산이었다. 같은 수가 있을 경우가 있기 때문.

예를 들어 1 1 1 2 2 조합이라면 해커를 고용하지 않아도 답이 해결된다.

따라서 먼저 명예도를 오름차순으로 정렬해준 뒤

1부터 max_honor을 높여가며 몇 번의 action을 취해야 하는지 보았다.

PYTHON CODE

N = int(input())
honors = []
for _ in range(N):
    honors.append(int(input()))

max_honor = 1
action = 0

for num in sorted(honors): #정렬 먼저
    if num >= max_honor: 
        action += num - max_honor
        max_honor += 1

print(action)