반응형
문제
nums는 숫자로 이루어진 배열입니다.
가장 자주 등장한 숫자를 k 개수만큼 return 해주세요.
nums = [1,1,1,2,2,3],
k = 2
return [1,2]
nums = [1]
k = 1
return [1]
풀이 1-1
def top_k(nums, k):
res = []
for i in range(k):
max_num = max(nums, key=nums.count)
res.append(max_num)
for num in nums[:]:
if num == max_num:
nums.remove(num)
return res
max의 key 속성을 활용해서 제일 많이 등장한 숫자면 리스트에 넣고,
넣은 다음에 리스트에서 해당 숫자를 삭제했다.
그걸 k번 반복하고 리스트를 반환했다.
1-2
def top_k(nums, k):
res = []
for i in range(k):
max_num = max(nums, key=nums.count)
res.append(max_num)
nums = [num for num in nums if num not in res]
return res
위랑 같은데 원래 리스트에서 제일 많은 값을 remove로 삭제하는 대신 리스트 컴프리헨션을 이용해서 제일 많은 값 뺀 값들만 넣는 방법으로 없앴다.
2-1
def top_k(nums, k):
sort_nums = sorted(set(nums), key=nums.count, reverse=True)
return [sort_nums[i] for i in range(k)]
리스트를 set으로 바꾸고 sorted와 key를 사용해서 제일 많이 나온 값부터 차례로 중복 안되게 정렬하고 k만큼만 반환했다.
2-2
def top_k(nums, k):
return sorted(set(nums), key=nums.count, reverse=True)[:k]
리스트 복사[ : ]를 이용해서 for문을 없애고 바로 k만큼만 반환했다
def top_k(nums, k):
return sorted(set(nums), key=lambda num: nums.count(num), reverse=True)[:k]
lambda로 바꿔보았다.
(set을 sort하면 list가 된다)
nums = [1,1,1,2,2,3]
print(set(nums))
print(type(set(nums)))
print(sorted(set(nums)))
print(type(sorted(set(nums))))
# 결과
# {1, 2, 3}
# <class 'set'>
# [1, 2, 3]
# <class 'list'>
반응형
'wecode' 카테고리의 다른 글
[Mission 4] 로그인 기능 구현 (0) | 2022.07.16 |
---|---|
[Mission 3] 회원가입 기능 구현 (0) | 2022.07.16 |
[Mission 2] 모델링 (0) | 2022.07.16 |
Code Kata | Week2 - Day5 (0) | 2022.07.15 |
Code Kata | Week2 - Day3 (0) | 2022.07.13 |