nums는 숫자로 이루어진 배열이다.
가장 자주 등장하는 숫자 순으로 k개수만큼 return해라
ex)
1번 예시)
nums = [1, 1, 1, 4, 4, 2]
k = 2
return [1, 2]
__________________
2번 예시)
nums = [1]
k = 1
return [1]
이 문제를 보자마자 전에 풀었던 '가반수를 차지하는 숫자를 출력해라' 문제에서 풀었던 코드를 사용하면 될 것 같았다.
그때 사용했던 코드를 상기해보자면...(k를 제외하고)
def top_k(num):
new_nums = {}
for num1 in nums:
try: new_nums[num1] += 1
except: new_nums[num1] = 1
new_nums = sorted(new_nums.items(), key=lambda x: x[1], reverse=True)
return new_nums[0][0]
여기 코드에 더해서 큰 순서대로 k만큼만 뽑아주면 된다고 생각했다.
def top_k(nums, k):
new_nums = {}
new_k = []
mon = []
for num1 in nums:
try: new_nums[num1] += 1
except: new_nums[num1] = 1
new_nums = sorted(new_nums.items(), key=lambda x: x[1], reverse=True)
for num2 in range(k):
new_k.append(num2)
mon.append(new_nums[new_k[num2]][0])
return mon
print(top_k([1,2,3,4,4,4,5,5,5,5,6,2,3,3], 2))
return 값은 [5, 3]
숫자가 몇번 중복됬는지 딕셔너리에 넣고 value값이 큰 순서대로 나열을 한 상태에서 또 다시 for 문을 통해서 range(k)만큼 새로운 리스트에 숫자를 저장한다.
ex) range(2) ==> new_k = [0,1]이 저장되는 식이다.
이후 new_k리스트를 new_nums의 요소를 인덱스 형식으로 뽑아낼때 사용하는 번호로 사용했다.
ex) mon.append(new_nums[new_k의 몇번째 익덱스])
이후 mon을 리턴 하면 성공이다.
코드식이 너무 긴 것 같다.... 다음문제는 코드식을 더 줄여보도록 해보자...