1 분 소요

1. 문제

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 이하의 정수이고, 동점자는 없다고 가정한다. 
입력으로 제공되는 국가는 적어도  나라 이상이다.

// 출력
메달을 받는 학생들을 , , 동메달 순서대로  줄에  명씩 출력한다. 
,  번째 줄에는 금메달 수상자를, 
 번째 줄에는 은메달 수상자를, 
 번째 줄에는 동메달 수상자를 출력한다. 
하나의 줄에는 소속국가 번호와 학생 번호를 하나의 빈칸을 사이에 두고 출력한다. 

// 예제 입력 1 
9
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
1 2
3 4


2. 핵심 아이디어


3. Python 문제풀이

import sys
input = sys.stdin.readline

n = int(input())
arr = []
cnt = 0

for _ in range(n) :
  arr.append(list(map(int, input().split())))
 
arr = sorted(arr, key = lambda x : -x[2])
print(arr[0][0], arr[0][1])
print(arr[1][0], arr[1][1])

if arr[0][0] == arr[1][0] : 
  cnt = 1
 
for i in range(2, n) :
  if cnt == 0 : 
    print(arr[i][0], arr[i][1])
    break
  else :
    if arr[1][0] != arr[i][0] :
      print(arr[i][0], arr[i][1])
      break


4. Java 문제풀이


댓글남기기