놀랍게도 3년 전 틀렸던 문제이다.
그당시 코드는 이랬는데
l = []
for i in range(int(input())):
a,b,c = map(int,input().split())
l.append((a,b,c))
l = sorted(l,key=lambda x:-x[2])
print(*l[0][:2])
print(*l[1][:2])
if l[0][0] == l[1][0]:
print(*l[3][:2])
else:
print(*l[2][:2])
무엇을 요구하는지 잘 모르겠다. 예제는 맞게 나오는데 왜 이렇게 기괴하게 풀었지?
3년 뒤의 지금은 데이터 수에 대비하여 시간제한이 괜찮다고 생각하여 굳이 인덱스 슬라이싱을 이용하지 않고, 그냥 딕셔너리를 사용하여 단순 구현하기로 하였다. 어차피 쉬운 문제고 코드에 주석으로 달아두었다.
# 입력
n = int(input())
l = []
d = {}
for i in range(100):
d[i+1] = 0
for _ in range(n):
nation, student, score = map(int,input().split())
l.append((nation,student,score))
# 점수순으로 정렬
l = sorted(l,key=lambda x:x[2],reverse=True)
#
cnt = 0 # 순위는 3등까지 있어서 3개이상 나오지 않도록
for i in l:
nation = i[0]
student = i[1]
if d[nation] >= 2: # 그 나라에서 수상한 사람이 2명 이상이면
continue # 지금 보는 사람은 pass
else: # 아니라면
d[nation] += 1 # 수상자 수에 1더하기
cnt += 1
print("%d %d" %(nation,student))
if cnt == 3: # 3등이상은 나올 수 없으니까
break
하도 딕셔너리에서 요소값 정렬을 하다 보니까 이제 익숙해져서 잘 사용한다. 그나마 다행일지도.
요즘 다시 코테준비를 하면서 "시도했지만 맞지 못한 문제" 부분을 보고 있다. 지금 다시보면 쉽기도 하고 모르는 것도 보이기도 하고 상당히 재밌다.
알고리즘이 상당히 재밌다니 ,, 당신 싸패인가요?