링크
백준 11399
지난주인가.. 뭐하다가 였는지는 기억이 안나는데
딕셔너리의 value값을 기준으로 정렬 하는 방법을 검색해서 익혔었다.
sorted(my_dict.items(), key=lambda x: x[1])
sorted()
와lambda
를 이용하면 딕셔너리를 value값으로 정렬하는 것이 가능하다.
sorted()
는 키워드인자로key
를 갖고있고 이것에 할당된 값을 기준으로 정렬을 할 수 있다.
lambda
는 쉽게말해 코드 안에서 바로 사용할 수 있는 간단한 함수이다.
lambda 인자리스트: 표현식
으로 사용할 수 있다.
따라서 코드를 해석해보면
my_dict.items()
을 통해 key와value를 튜플로 받아온다.key=lambda x: x[1]
sorted함수의 key의 아규먼트로lambda x
를 할당한다.
x는 x[1]이므로 받아온 튜플의 1번 인덱스 즉, value값을 x로 넘겨준다.
이 방법을 사용해 딕셔너리를 value값을 기준으로 정렬하는 것이 문제를 푸는데 결정적인 역할을 했다.
정답코드를 해석해보면 다음과 같다.
- enumerate를 이용해 인덱스와 요소로 분리한다.
- 빈 딕셔너리에 idx : val로 추가한다. 이를 통해 해당 사람이 몇분이나 걸리는지 딕셔너리로 만들 수 있다.
- 시간(value)을 기준으로 오름차순정렬한다.
- before라는 변수에 나오는 값들을 누적해서 더해준다.
- answer에 before를 더한다.
N = int(input())
time = list(map(int, input().split(' ')))
person = {}
before = 0
answer = 0
for idx, val in enumerate(time):
person[idx+1] = val
person = sorted(person.items(), key=lambda x: x[1])
for i in range(len(person)):
before += person[i][1]
answer += before
print(answer)
약 두달이 지나 해당 문제를 다시 풀어보았다.
난 왜 저렇게 어렵게 풀었을까..?
N = int(input())
time = sorted(list(map(int, input().split())))
tmp = 0
answer = 0
for t in time:
tmp += t
answer += tmp
print(answer)
sorted(my_dict.items(), key=lambda x: x[1])