[codeup] 4751 : 아시아 정보올림피아드

SUNGJIN KIM·2022년 6월 21일
0

CODEUP

목록 보기
56/76
post-thumbnail

문제

아시아 정보올림피아드

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

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

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

대회 결과가 입력으로 주어질 때, 메달 수상자를 결정하여 출력하는 프로그램을 작성하시오.이 경우, 금메달 수상자는 1번 국가의 1번 학생이고, 은메달 수상자는 1번 국가의 2번 학생이며, 동메달 수상자는 3번 국가의 4번 학생이다. (1번 국가의 3번 학생의 성적이 동메달 수여자보다 높지만, 나라 별 메달 수가 두 개 이하 이므로 1번 국가 3번 학생은 동메달을 받을 수 없다.)

입력

입력의 첫 번째 줄에는 대회참가 학생 수를 나타내는 N 이 주어진다. 단, 3<=N<=100 이다. 두 번째 줄부터 N 개의 줄에는 각 줄마다 한 학생의 소속 국가 번호, 학생 번호, 그리고 성적이 하나의 빈칸을 사이에 두고 주어진다. 단, 국가 번호는 1부터 순서대로 하나의 정수로 주어지며, 각 학생번호는 각 나라별로 1부터 순서대로 하나의 정수로 주어진다, 점수는 0 이상 1000 이하의 정수이고, 동점자는 없다고 가정한다. 입력으로 제공되는 국가는 적어도 두 나라 이상이다.

입력 예시

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 2
3 4

문제 풀이

정말 오래걸려서 풀었다.
어떤 식으로 풀지는 쉽게 생각했는데, 그걸 구현해내는게 생각보다 쉽지 않았다.

나라 번호에 따른 조건이 있어서 이를 dic으로 카운트를 세었고,
그 카운트에 맞춰서 금은동을 순서대로 list에 넣어줬다.
처음 생각했을때는 완전 간단할 줄 알았는데, 조건을 표현하기가 생각보다는 까다롭더라

student = int(input())

grade_board = []
for i in range(student):
    nation,student_number,grade = map(int,input().split(" "))
    grade_board.append([nation,student_number,grade])

reversed_grade_board = sorted(grade_board,reverse=True, key=lambda grade_board : grade_board[2])
nationCount = []
for i in range(student):
    nationCount.append(grade_board[i][0])
nationCount = set(nationCount)
nationCount_dict = {int : 0 for int in nationCount}

total_score = []
for i in range(student):
    if len(total_score) < 3 :
        if reversed_grade_board[i][0] in nationCount_dict:
            nationCount_dict[reversed_grade_board[i][0]] += 1
        if nationCount_dict[reversed_grade_board[i][0]] <= 2:
            total_score.append(reversed_grade_board[i])

for i in range(len(total_score)):
    print(total_score[i][0], total_score[i][1])

profile
#QA #woonmong

0개의 댓글