숫자로 이루어진 배열 nums
에서 가장 많이 등장한 숫자를 k
만큼 리턴하는 알고리즘 문제를 풀다가
sorted()
내장메소드에 대해 좀 더 깊게 공부하게 되었고 생각보다 많은 기능을 제공해준다는 것을 깨달았다.
추가적으로 자주 애용하고 있던 dictionary 내장 메소드setdefault()
에 대해서도 설명해보려고 한다.
def top_k(nums, k):
num_frequency = dict()
for n in nums:
num_frequency.setdefault(n, 0)
num_frequency[n] += 1
sorted_nums_by_val = sorted(num_frequency.items(), key= lambda x: -x[1])
result = list()
for i in range(k):
result.append(sorted_nums_by_val[i][0])
return result
num_frequency
의 key: value pair 를 setdefault 함수로 지정해놓았다. 키 에러가 나지 않게 하기 위함이다. setdefault 를 쓰지 않고 조건문으로 구현할 수는 있지만 setdefault 를 안 쓸 이유가 없다.
sorted 함수의 첫 번째 인자로 num_frequency.items()
, 즉 (key, value) pair 의 튜플 값 변환한다.
그리고 sorted 에는 key 라는 키워드 파라미터를 받는데, key 를 기준으로 정렬하겠다는 의미이다.
key= lambda x: <조건문>
형식으로 같이 오게된다.
나는 여기서 튜플의 두 번째 인덱스인 value 값을 기준으로 내림차순으로 정렬하고 싶어서 key = lambda x: -x[1]
으로 작성하였다.
value 기준 오름차순으로 작성하고 싶다면 -
없이 x[1]
으로 작성하면 된다.
또한 여러 key 값을 기준으로 정렬할 수도 있다. 이럴 때는 lambda x: (x[0], -x[1])
와 같이 튜플로 나타내주면 된다. 이는 key 를 기준으로 먼저 오름차순으로 정렬하고, 앞에서 정렬되었던 기준을 만족하면서 다시 value 를 기준으로 정렬한다는 의미이다.
강력한 sorted() 메소드에 대해 알아보았으며, 앞으로 자주 사용할 것 같다.