Algorithm/Implementation

(Python/파이썬) - 백준(BOJ) 2535번 : 아시아 정보올림피아드

하눤석 2022. 4. 10. 20:19
728x90

https://www.acmicpc.net/problem/2535

 

2535번: 아시아 정보올림피아드

첫 번째 줄에는 대회참가 학생 수를 나타내는 N이 주어진다. 단, 3 ≤ N ≤ 100이다. 두 번째 줄부터 N개의 줄에는 각 줄마다 한 학생의 소속 국가 번호, 학생 번호, 그리고 성적이 하나의 빈칸을 사

www.acmicpc.net


  • 문제 : 

최근 아시아 지역의 학생들만 참여하는 정보 올림피아드 대회가 만들어졌다. 이 대회는 온라인으로 치러지기 때문에 각 나라에서 이 대회에 참여하는 학생 수의 제한은 없다.

참여한 학생들의 성적순서대로 세 명에게만 금, 은, 동메달을 수여한다. 단, 동점자는 없다고 가정한다. 그리고 나라별 메달 수는 최대 두 개다.

예를 들어, 대회 결과가 다음의 표와 같이 주어졌다고 하자.

참가국학생번호점수

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