TIL - Wecode | Code Kata .05

한성봉·2021년 6월 6일
0

문제

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):
  one_num = set(nums) # 중복 제거 # [1,2,3]
  middle_num = {} # {1: 3, 2: 2, 3: 1}
  # result = [(1, 3), (2, 2), (3, 1)]
  k_result = []

  for i in one_num:
    middle_num[i] = nums.count(i)
    middle_num.items()
    result = sorted(middle_num.items(), key=lambda x: x[1], reverse=True)
    
  for j in range(k):
    k_result.append(result[j][0])

  return k_result

print(top_k([1,1,1,2,2,3], 2))
# [1, 2]

for문을 사용하여 첫번째 인자로 들어온 리스트의 중복을 제거하여 숫자 하나씩 몇 번씩 중복되었는지 확인하는 로직을 짜봤습니다. 그렇게 일단 middle_num 에서 딕셔너리 형태로 키값으로 중복적으로 나온 숫자. value값으로 중복된 횟수를 얻어내는데 까지 성공하였습니다.

이후 인덱스로 뽑아낼 수 있게 딕셔너리형태를 리스트안에 key와 value값을 튜플 형태로 저장하였습니다.

잘 정렬된 리스트를 다시 k 개 만큼 가장 많이 반복된 수를 꺼내야 했습니다.
그렇기에 다시 K 개 만큼 반복문을 이용하여 앞에서부터 꺼내는 로직을 짰습니다.

lambda 식은 구글링을 통해 도움을 받았습니다. lambda는 함수를 간략하게 만들어주는
lambda 인자 : 표현식 의 형태로 사용합니다.

0개의 댓글