백준 2535번: 아시아 정보올림피아드
알고리즘 분류: 구현, 정렬
파이썬(Python) 풀이
링크: 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번 학생은 동메달을 받을 수 없다.)
대회 결과가 입력으로 주어질 때, 메달 수상자를 결정하여 출력하는 프로그램을 작성하시오.
입력
첫 번째 줄에는 대회참가 학생 수를 나타내는 N이 주어진다. 단, 3 ≤ N ≤ 100이다. 두 번째 줄부터 N개의 줄에는 각 줄마다 한 학생의 소속 국가 번호, 학생 번호, 그리고 성적이 하나의 빈칸을 사이에 두고 주어진다. 단, 국가 번호는 1부터 순서대로 하나의 정수로 주어지며, 각 학생번호는 각 나라별로 1부터 순서대로 하나의 정수로 주어진다, 점수는 0 이상 1000 이하의 정수이고, 동점자는 없다고 가정한다. 입력으로 제공되는 국가는 적어도 두 나라 이상이다.
출력
메달을 받는 학생들을 금, 은, 동메달 순서대로 한 줄에 한 명씩 출력한다. 즉, 첫 번째 줄에는 금메달 수상자를, 두 번째 줄에는 은메달 수상자를, 세 번째 줄에는 동메달 수상자를 출력한다. 하나의 줄에는 소속국가 번호와 학생 번호를 하나의 빈칸을 사이에 두고 출력한다.
풀이
이 문제는 오름차순으로 정렬을 한 뒤에 '나라별 메달 수는 최대 두 개다'를 예외 처리하면 된다.
먼저 country(국가), number(학생번호), score(점수) 리스트를 생성한 뒤,
for 반복문을 통해 입력을 받는다.
그리고 score에서의 최댓값이 포함된 위치를 찾아준 뒤 first에 넣어준다.
그러면 같은 위치에서 country와 number도 가장 높은 점수를 가진 학생일 것이다.
이후, 출력을 해준다.
second(2등)에서도 이 과정을 반복한다.
하지만 third(3등)의 경우, 1등과 2등의 국가가 같으면 3등은 국가가 달라야하기에
while True로 국가가 다를때까지 최대점수에서부터 한칸씩 내려온다고 생각하면 된다.
'🌀 알고리즘(Algorithm) > 백준(문제 풀이)' 카테고리의 다른 글
[파이썬 풀이] 25345번: 루나의 게임 세팅 - 백준 (0) | 2022.08.17 |
---|---|
[파이썬 풀이] 1152번: 단어의 개수 - 백준 (0) | 2022.08.14 |
[파이썬 풀이] 17202번: 핸드폰 번호 궁합 - 백준 (0) | 2022.07.28 |
[파이썬 풀이] 24039번: 2021은 무엇이 특별할까? - 백준 (0) | 2022.07.19 |
[파이썬 풀이] 2869번: 달팽이는 올라가고 싶다 - 백준 (0) | 2022.07.10 |