PS/백준 [백준/2012] 등수 매기기 (Python) - Problem : https://www.acmicpc.net/problem/2012 2012번: 등수 매기기 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 500,000) 둘째 줄부터 N개의 줄에 걸쳐 각 사람의 예상 등수가 순서대로 주어진다. 예상 등수는 500,000 이하의 자연수이다. www.acmicpc.net Difficulty : Silver 3 Status : Solved Time : 00:02:37 문제 설명 더보기 2007년 KOI에 N명의 학생들이 참가하였다. 경시일 전날인 예비소집일에, 모든 학생들은 자신이 N명 중에서 몇 등을 할 것인지 예상 등수를 적어서 제출하도록 하였다. KOI 담당조교로 참가한 김진영 조교는 실수로 모든 학생의 프로그램을 날려 버렸다. 1등부터 N등까지 동석차 없이 등수를 매겨야 하는 김 조교는, 어쩔 수 없이 각 사람이 제출한 예상 등수를 바탕으로 임의로 등수를 매기기로 했다. 자신의 등수를 A등으로 예상하였는데 실제 등수가 B등이 될 경우, 이 사람의 불만도는 A와 B의 차이 (|A - B|)로 수치화할 수 있다. 당신은 N명의 사람들의 불만도의 총 합을 최소로 하면서, 학생들의 등수를 매기려고 한다. 각 사람의 예상 등수가 주어졌을 때, 김 조교를 도와 이러한 불만도의 합을 최소로 하는 프로그램을 작성하시오. 입력 및 출력 더보기 입력 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 500,000) 둘째 줄부터 N개의 줄에 걸쳐 각 사람의 예상 등수가 순서대로 주어진다. 예상 등수는 500,000 이하의 자연수이다. 출력 첫째 줄에 불만도의 합을 최소로 할 때, 그 불만도를 출력한다. 입력 예시 5 1 5 3 1 2 출력 예시 3 풀이 어렵게 생각하면 어렵고, 쉽게 생각하면 쉬운 문제. 그리디하게 생각해보면, 1등은 1등에 가깝게, 꼴등은 꼴등에 가깝게, n등은 n등에 가깝게 실제 등수를 반영하면 된다. 즉 예측 등수를 기준으로 오름차순 정렬 후, 각 등수와 실제 등수의 차이를 더하면 최소가 된다. 풀이 코드 import sys input = sys.stdin.readline N = int(input()) num_list = [int(input()) for _ in range(N)] num_list.sort() answer = 0 for i in range(N) : answer += abs(i+1 - num_list[i]) print(answer) 풀이 완료~ 공유하기 URL 복사카카오톡 공유페이스북 공유엑스 공유 게시글 관리 구독하기마젠티노's 저작자표시 비영리 동일조건 Contents 당신이 좋아할만한 콘텐츠 [백준/1109] 섬 (Python) 2023.04.18 [백준/1765] 닭싸움 팀 정하기 (Python) 2023.04.18 [백준/2983] 개구리 공주 (Python) 2023.04.13 [백준/14466] 소가 길을 건너간 이유 6 (Python) 2023.04.11 댓글 0 + 이전 댓글 더보기