728x90
제목 : 등수 매기기
출처 : 백준 / 2012번: 등수 매기기 (acmicpc.net)
사용 자료구조&알고리즘 : 그리디, 정렬
문제 설명
1. 모든 학생의 시험 정보를 날려 1등부터 N등까지 동석차 없이 등수를 임의로 매겨야 한다.
2. 예상 등수와 결과 등수의 차를 불만도라고 할 때, 불만도의 합의 최소가 되도록 등수를 매기려고 한다.
3. 불만도 합의 최솟값을 구해라.
제한
시간 제한 : 2초
메모리 제한 : 256 MB
N (1<= N <= 500,000)
예상 등수는 500,000 이하의 자연수이다.
문제 풀이
1단계 : 최대 시간복잡도는 얼마인가?
N의 크기가 10,000 이상이기 때문에 O(NlogN) 이하 시간복잡도가 요구된다.
2단계 : 핵심 아이디어는 무엇인가?
예상 등수를 정렬하고 정렬된 등수대로 실제 등수를 부여하여 불만도를 계산할 때, 예상 등수와 실제 등수의 차의 총합이 최소가 될 수 있다. O(NlogN)만에 문제를 해결할 수 있다.
정답 코드
n = int(input())
arr = [int(input()) for _ in range(n)]
arr_sum = 0
arr.sort()
for i in range(n):
arr_sum += abs(arr[i] - (i+1))
print(arr_sum)
728x90
'프로그래밍 > 알고리즘 문제 풀이' 카테고리의 다른 글
[백준 시리즈] 21318번 : 피아노 체조 - 실버 1 / Python (1) | 2024.09.17 |
---|---|
[백준 시리즈] 1024번 : 수열의 합 - 실버 2 / Python (1) | 2024.09.17 |
[백준 시리즈] 13900번 : 실버4 - 순서쌍의 곱의 합 / Python (0) | 2024.09.10 |
[백준 시리즈] 21756번 : 브론즈2 - 지우개 / Python (0) | 2024.09.10 |