본문 바로가기
알고리즘 풀이/백준

[백준 2012] 등수 매기기(python)

by char_lie 2023. 3. 28.
반응형

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

 

2012번: 등수 매기기

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

www.acmicpc.net

등수 매기기 문제

자기가 예상한 등수와 실제 등수가 다를 때의 불만도가 둘의 차이일 때 최소값을 구하는 문제

정렬해서 비교하면 쉽게 풀어낼 수 있다.

⚙️내가 푼 정답코드

import sys
N = int(sys.stdin.readline())
rank = sorted([int(sys.stdin.readline()) for _ in range(N)]) # 정렬해서 받기
cnt = 0 
for i in range(N):
    if rank[i] != i+1: # 자기 예상 등수와 실제 등수가 다르면
        cnt += abs(rank[i]-(i+1)) # 둘의 차이만큼 cnt에 더하기
print(cnt)

📌 문제 접근 포인트

1. 자신의 예상 등수와 실제 등수의 차이를 구해야한다. 그러면 자기가 예상한 등수로 순서대로 오름차순 정렬을 해보자
2. 오름차순으로 정렬하면 1차원 리스트이니 실제 등 수와 비교해주기 쉽다. 인덱스의 왼쪽부터 하나씩 실제 등수랑 매치를 시켜주자
3. 둘의 차이(불만도) 만큼 더해주면 불만도의 최소값을 구할 수 있다.
반응형

댓글