백준 11399

링크

백준 11399

ATM


지난주인가.. 뭐하다가 였는지는 기억이 안나는데
딕셔너리의 value값을 기준으로 정렬 하는 방법을 검색해서 익혔었다.

sorted(my_dict.items(), key=lambda x: x[1])

sorted()lambda를 이용하면 딕셔너리를 value값으로 정렬하는 것이 가능하다.
sorted()는 키워드인자로 key를 갖고있고 이것에 할당된 값을 기준으로 정렬을 할 수 있다.

lambda는 쉽게말해 코드 안에서 바로 사용할 수 있는 간단한 함수이다.
lambda 인자리스트: 표현식 으로 사용할 수 있다.

따라서 코드를 해석해보면

  1. my_dict.items()을 통해 key와value를 튜플로 받아온다.
  2. key=lambda x: x[1] sorted함수의 key의 아규먼트로 lambda x를 할당한다.
    x는 x[1]이므로 받아온 튜플의 1번 인덱스 즉, value값을 x로 넘겨준다.

이 방법을 사용해 딕셔너리를 value값을 기준으로 정렬하는 것이 문제를 푸는데 결정적인 역할을 했다.

정답코드를 해석해보면 다음과 같다.

  1. enumerate를 이용해 인덱스와 요소로 분리한다.
  2. 빈 딕셔너리에 idx : val로 추가한다. 이를 통해 해당 사람이 몇분이나 걸리는지 딕셔너리로 만들 수 있다.
  3. 시간(value)을 기준으로 오름차순정렬한다.
  4. before라는 변수에 나오는 값들을 누적해서 더해준다.
  5. 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)

알게된 것👨‍💻

  • 딕셔너리의 value값을 기준으로 정렬하는 방법 - sorted(my_dict.items(), key=lambda x: x[1])

좋은 웹페이지 즐겨찾기