nums는 숫자로 이루어진 배열입니다.
가장 자주 등장한 숫자를 k 개수만큼 반환하는 프로그램을 작성해주세요.
예를 들어,
nums = [1,1,1,2,2,3],
k = 2
return [1,2]
nums = [1]
k = 1
return [1]
우선 문제 분석은 다음과 같습니다.
배열에서 각 숫자가 등장하는 개수를 알아야합니다.
인자로 받는 k
는 그 개수들을 내림차순으로 정렬했을 때 k번째 값을 가리킵니다.
개수를 비교하기 위해 새로운 {}
를 선언해줍니다.
딕셔너리의 key
에는 리스트 내부의 중복을 없앤 숫자를 값으로 넣습니다.
딕셔너리의 value
에는 각 숫자의 개수를 값으로 넣습니다.
이 value를 기준으로 내림차순 정렬을 했을 때 0번째 값부터 k번째 값까지 해당하는 key
값을 반환해주면 됩니다.
코드로 알아보겠습니다.
def answer(nums, k) :
new_dict = {}
result = []
for num in nums:
if num in new_dict :
new_dict[num] += 1
else:
new_dict[num] = 1
value_list = sorted(new_dict.values(), reverse=True)[:k]
for i in new_dict :
if new_dict[i] in value_list :
result.append(i)
for i in new_dict :
if new_dict[i] in value_list :
result.append(i)
return result
sort(reverse=True)
sort() 함수는 인자로 받는 값을 오름차순으로 정렬해주는 함수입니다.
reverse
속성을 True
로 지정해주면 내림차순으로 정렬해주게 됩니다.
위의 코드에서 반복문을 통해 List와 Dictionary를 만드는 코드를 줄일 수 있는데요.
List Comprehension
과 Dictionary Comprehension
을 통해 해결할 수 있습니다.
아래 코드를 통해 알아보겠습니다.
def answer(nums, k) :
new_dict = {count(num) : num for num in set(nums)}
key_list = sorted(new_dict.keys(), reverse=True)[:k]
return [new_dict[i] for i in value_list]
흥미로운 풀이 방법인 것 같네요!
`