[TIL] Code Kata 8
def top_k(nums, k):
nums_number = list(set(nums))
final_list = []
count_dict = {}
for i in nums_number:
count_dict[i] = nums.count(i)
dict_tuple = count_dict.items()
sorted_dict_tuple = sorted(dict_tuple, reverse=True, key=lambda x:x[1])
for i in range(k):
final_list.append(sorted_dict_tuple[i][0])
return final_list
이 문제를 해석해보면 가장 많이 반복되는 숫자 순으로 k개가 리스트에 담겨져서 반환되어야 한다. 처음에는 리스트를 이용해서 구현하려고 했지만 잘 되지 않았다. 그래서 생각해 낸것이 딕셔너리이다. 일단, list(set(nums))으로 중복된 숫자를 제거하고 리스트에 담는다. 그리고 그 리스트에 담겨져 있는 숫자의 개수만큼 for문을 돌려서 딕셔너리 형태로 ex) {'1':개수, '2':개수} 만든다.
count_dict.items()를 사용하면 {('1':개수), ('2':개수)} 이런식으로 만들어지는데 그렇게 되면 딕셔너리도 리스트처럼 index를 사용할 수 있게 된다. 그렇게 만들어진 딕셔너리를 sorted 메소드를 사용해서 value 값이 큰 순으로 정렬 시킨다. sorted(dict_tuple, reverse=True, key=lambda x:x[1]) -> x:x[1] 의 의미가 value 값을 의미한다. x:x[0]으로 사용하면 key값을 의미하게 된다.
그렇게 정렬된 딕셔너리를 for문으로 k번 돌려서 key값을 차례로 뽑으면 된다.
이렇게 하기 위해서 value 값이 큰 순으로 정렬 시켰다.
Author And Source
이 문제에 관하여([TIL] Code Kata 8), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@chan_baek/TIL-Code-Kata-8저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)