https://www.acmicpc.net/problem/2535
문제분석
나라별 최대 메달 수가 두 개라는 점에 유의해야한다. 정렬을 한 뒤에 앞서 말한 조건에 유의하여 메달을 부여해야 풀 수 있는 문제이다. 정렬은 점수 순으로 정렬을 하고 먼저 2개의 메달을 메달을 부여한 뒤에 한 나라에 2개 이상의 메달이 부여되었는지를 확인한 뒤에 나머지 1개의 메달을 수여하여야 문제를 제대로 풀 수 있다
코드
input = __import__('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
문제풀이
빠른 입력을 사용하여야 시간 초과가 나지 않는다. 우선, 다차원 리스트로 입력을 받은 뒤에 이를 점수 순으로 lambda 정렬을 해준다. 그런 다음 금메달과 은메달을 먼저 수여하고, 만약 금메달과 은메달 수상자의 나라가 같으면 은메달 수상자의 나라와 동메달 수상자의 나라가 같으면 안된다. 만약 그렇지 않은 경우에는 그냥 동메달을 수상하면 된다
'Koala - 6기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준 / python] 11286번: 절댓값 힙 (0) | 2022.05.08 |
---|---|
[백준/C++] 2346번 풍선 터뜨리기 (0) | 2022.04.28 |
[BOJ/python] 2776번 암기왕 (0) | 2022.04.03 |
[BOJ / Python] 2805 - 나무 자르기 (0) | 2022.04.03 |
[백준/C++] 2110번 공유기 설치 (0) | 2022.03.30 |