Codecata ⎜ 많이 포함된 숫자 뽑아내기
많이 포함된 숫자 뽑아내기
문제
nums는 숫자로 이루어진 배열입니다.
가장 자주 등장한 숫자를 k 개수만큼 return해주세요.
nums = [1,1,1,2,2,3], k = 2
return [1,2]
nums = [1] k = 1
return [1]
나의 풀이
접근방법
def top_k(nums, k):
my_dic = {}
my_list = []
for num in nums:
if num not in my_dic:
my_dic[num] = 1
else:
my_dic[num] += 1
reverse_my_dic = sorted(my_dic.items(), reverse=True, key=lambda x: x[1])
reverse_my_dic = reverse_my_dic[:k]
for num in reverse_my_dic:
my_list.append(num[0])
return my_list
nums = [3, 3, 3, 2, 2, 2, 7, 1, 8, 9]
k = 3
print(top_k(nums, k))
위코드 풀이
def top_k(nums, k):
count = {}
for n in nums:
count[n] = count.get(n, 0) + 1
bucket = [[] for _ in range(len(nums) + 1)]
for n, freq in count.items():
bucket[freq].append(n)
ret = []
for n_list in bucket[::-1]:
if n_list:
ret.extend(n_list)
if len(ret) == k:
return ret
nums = [1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 6]
k = 3
print(top_k(nums, k))
위코드 풀이 코드 분석
코드1
def top_k(nums, k):
count = {}
for n in nums:
count[n] = count.get(n, 0) + 1
print(count)
출력결과
{3: 1}
{3: 1, 2: 1}
{3: 1, 2: 1, 1: 1}
{3: 1, 2: 1, 1: 2}
{3: 1, 2: 1, 1: 3}
{3: 1, 2: 2, 1: 3}
{3: 1, 2: 3, 1: 3}
{3: 2, 2: 3, 1: 3}
{3: 3, 2: 3, 1: 3}
{3: 4, 2: 3, 1: 3}
{3: 5, 2: 3, 1: 3}
{3: 5, 2: 3, 1: 3, 4: 1}
{3: 5, 2: 3, 1: 3, 4: 1, 5: 1}
{3: 5, 2: 3, 1: 3, 4: 1, 5: 1, 6: 1}
코드2
bucket = [[] for _ in range(len(nums) + 1)]
출력결과
[[], [], [], [], [], [], [], [], [], [], [], [], [], [], []]
코드3
for n, freq in count.items():
bucket[freq].append(n)
print(bucket)
출력결과
[[], [4, 5, 6], [], [2, 1], [], [3], [], [], [], [], [], [], [], [], []]
코드4
ret = []
for n_list in bucket[::-1]:
if n_list:
ret.extend(n_list)
print(ret)
출력결과
[3]
[3, 1]
[3, 1, 2]
[3, 1, 2, 4, 5, 6]
None
댓글남기기