[Silver I] 알고리즘 기말고사 - 10424 (python)
구현, 정렬
상덕이의 기말고사가 코앞으로 다가왔다. 상덕이의 알고리즘 분반은 N명이 수강하고 있다. 알고리즘의 성적은 상대평가이기 때문에 동점자가 없으며, 각각의 학생들은 중간고사와 기말고사의 등수에 따라 만족도가 다르다. 중간고사 때 i등을 한 학생의 기말고사의 만족도 Ai는 다음과 같다.
- Ai = Bi - Ci
- Bi = (중간고사 때 자신보다 높은 등수를 받고 기말고사에는 자신보다 낮은 등수를 받은 학생의 수)
- Ci = (중간고사 때 자신보다 낮은 등수를 받고 기말고사에는 자신보다 높은 등수를 받은 학생의 수)
예를 들어 5명의 학생들이 중간고사와 기말고사 때 각각 다음과 같은 성적을 받았다고 하자. 편의를 위해 학생들의 중간고사 성적을 기준으로 번호를 붙여보자. 예를 들어 중간고사 때 i등을 한 학생을 i번 학생이라 칭한다.
중간고사 성적기말고사 성적1번 학생2번 학생3번 학생4번 학생5번 학생
1등 | 5등 |
2등 | 4등 |
3등 | 3등 |
4등 | 2등 |
5등 | 1등 |
5번 학생의 경우 중간고사 때 자신보다 높은 등수를 받고 기말고사에는 자신보다 낮은 등수를 받은 학생이 4명이고, 중간고사 때 자신보다 낮은 등수를 받고 기말고사에는 자신보다 높은 등수를 받은 학생의 수가 0명이므로 만족도는 4이다. 1번 학생의 경우 중간고사 때 자신보다 높은 등수를 받고 기말고사에는 자신보다 낮은 등수를 받은 학생이 0명이고, 중간고사 때 자신보다 낮은 등수를 받고 기말고사에는 자신보다 높은 등수를 받은 학생의 수가 4명이므로 만족도는 -4이다.
상덕이의 알고리즘 분반 학생들의 만족도를 출력하는 프로그램을 만들어라.
첫째 줄에는 알고리즘을 수강하는 학생의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄에는 알고리즘 기말고사의 성적대로 1등부터 N등까지 중간고사의 성적을 번호로 하여 한 줄로 주어진다.
첫째 줄부터 중간고사 등수를 기준으로 1등부터 N등의 기말고사 성적 만족도를 한 줄씩 출력한다.
코드
import sys
input = sys.stdin.readline
n = int(input())
score = list(map(int, input().split()))
# 딕셔너리를 사용하여 값의 인덱스를 저장
score_index = {value: index + 1 for index, value in enumerate(score)}
for i in range(n):
print((i + 1) - score_index[i + 1])