[백준] 2535 - 아시아 정보올림피아드 (python)

Jin·2023년 12월 12일
1

문제 링크

놀랍게도 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

하도 딕셔너리에서 요소값 정렬을 하다 보니까 이제 익숙해져서 잘 사용한다. 그나마 다행일지도.
요즘 다시 코테준비를 하면서 "시도했지만 맞지 못한 문제" 부분을 보고 있다. 지금 다시보면 쉽기도 하고 모르는 것도 보이기도 하고 상당히 재밌다.

profile
go-getter

2개의 댓글

comment-user-thumbnail
2023년 12월 18일

알고리즘이 상당히 재밌다니 ,, 당신 싸패인가요?

1개의 답글