본문 바로가기

공부하는 것들/알고리즘

백준 2012번: 등수 매기기 **(그리디)

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

 

2012번: 등수 매기기

첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 500,000) 둘째 줄부터 N개의 줄에 걸쳐 각 사람의 예상 등수가 순서대로 주어진다. 예상 등수는 500,000 이하의 자연수이다.

www.acmicpc.net

실제 등수가 A인데 B로 예상한 만큼 abs(A-B)만큼으로 불만도 수치화.

불만도의 합을 최소로 하는 프로그램을 작성하시오.

 

import sys

def solve(N, rankings):
    rankings = sorted(rankings)
    basic = list(range(1,N+1))
    ans = 0
    for i in range(N):
        ans += abs(basic[i]-rankings[i])
    return ans

if __name__ == '__main__':
    N = int(input())
    rankings = []
    for i in range(N):
        rankings.append(int(sys.stdin.readline()))
    ans = solve(N,rankings)
    print(ans)

 

참고 : https://week-year.tistory.com/183