알고리즘/백준

[Silver I] 알고리즘 기말고사 - 10424 (python)

KimMinGyun 2024. 7. 10. 00:09

문제 링크

 

 

분류

구현, 정렬

 

문제 설명

상덕이의 기말고사가 코앞으로 다가왔다. 상덕이의 알고리즘 분반은 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])