여니의 취준 준비/코딩테스트 (Python)

[n2535] 아시아 정보올림피아드 in python

여니's 2021. 10. 18. 15:03


보자마자 lambda 함수로 정렬해놓고

나라 번호 저장하는 배열 하나 만들면

우선순위도 해결되겠다고 생각하며

풀기 시작했다.

 

lambda를 매번 까먹는 1인..

 

array=sorted(array,key=lambda x:x[2], reverse=True)

[a,b,c] -> c 기준으로 내림차순 정렬

 

만약 answer의 길이가 3개가 되면

이미 금은동이 정해진 거니까

반복문에서 빠져나온다.

 

 

시간 : 84ms..? 거의 맨 끝이다..

고수님들의 코드를 한 번 탐색하러 가봤다!

n = int(input())
# lambda로 정렬
array = [list(map(int, input().split())) for _ in range(n)]
array = sorted(array, key=lambda x: x[2], reverse=True)
answer = []
country = []
for idx in range(len(array)):
    if len(answer) == 3:
        break
    if country.count(array[idx][0]) < 2:  # 2개 이하
        answer.append(array[idx][0:2])  # 값 넣기
        country.append(array[idx][0])  # 나라 번호 넣기
        continue
for i in range(3):
    print(answer[i][0], answer[i][1])

이 방식도 생각안해본 건 아니었는데

이렇게 짜니까 시간이 더 적게 나온다

country_num을 뽑아내고, 그 크기만한 배열을 초기화해주고

인덱스 번호를 이용해서 금,은,동 나라번호 체크를 해주면 된다! 

n = int(input())
# lambda로 정렬
array = [list(map(int, input().split())) for _ in range(n)]
country_num=array[-1][0]
array = sorted(array, key=lambda x: x[2], reverse=True)
answer = [0] * (country_num+1)
cnt = 0
for i in array:
    if cnt >= 3:
        break
    if answer[i[0]] < 2:
        print(i[0],i[1])
        answer[i[0]] += 1
        cnt += 1
    else:
        continue