Algorithm/Implementation
(Python/파이썬) - 백준(BOJ) 2535번 : 아시아 정보올림피아드
하눤석
2022. 4. 10. 20:19
728x90
https://www.acmicpc.net/problem/2535
- 문제 :
최근 아시아 지역의 학생들만 참여하는 정보 올림피아드 대회가 만들어졌다. 이 대회는 온라인으로 치러지기 때문에 각 나라에서 이 대회에 참여하는 학생 수의 제한은 없다.
참여한 학생들의 성적순서대로 세 명에게만 금, 은, 동메달을 수여한다. 단, 동점자는 없다고 가정한다. 그리고 나라별 메달 수는 최대 두 개다.
예를 들어, 대회 결과가 다음의 표와 같이 주어졌다고 하자.
참가국학생번호점수
1 | 1 | 230 |
1 | 2 | 210 |
1 | 3 | 205 |
2 | 1 | 100 |
2 | 2 | 150 |
3 | 1 | 175 |
3 | 2 | 190 |
3 | 3 | 180 |
3 | 4 | 195 |
이 경우, 금메달 수상자는 1번 국가의 1번 학생이고, 은메달 수상자는 1번 국가의 2번 학생이며, 동메달 수상자는 3번 국가의 4번 학생이다. (1번 국가의 3번 학생의 성적이 동메달 수여자보다 높지만, 나라 별 메달 수가 두 개 이하 이므로 1번 국가 3번 학생은 동메달을 받을 수 없다.)
대회 결과가 입력으로 주어질 때, 메달 수상자를 결정하여 출력하는 프로그램을 작성하시오.
- 풀이 :
수상자가 3명 나올 때까지 내림차순으로 정렬한 학생들에게 수상가능여부 (같은 국가에서 이미 두명이 나왔는지 여부)
를 체크하고 아니라면 수상, 조건에 걸린다면 수상하지 않도록 구현했습니다.
- 소스코드 :
N = int(input())
nums = sorted([list(map(int,input().split())) for _ in range(N)], key = lambda x : x[2], reverse=True)
cnt = [0] * (N+1)
answer = 0
i = 0
while answer < 3:
if cnt[nums[i][0]] < 2:
cnt[nums[i][0]] += 1
print(nums[i][0],nums[i][1])
answer += 1
i += 1
320x100