python Algorithm #2

ahn__jh·2021년 4월 8일
0

nums는 숫자로 이루어진 배열입니다.

가장 자주 등장한 숫자를 k 개수만큼 return 해주세요.

ex)
nums = [1,1,1,2,2,3],
k = 2

return [1,2]

nums = [1]
k = 1

return [1]

첫 시도 코드

def top_k(nums, k):
    a=dict()
    c=[]
    for i in nums:
      a[i]=nums.count(i)

    b=(sorted(a.items(),key = lambda x:x[1] ,reverse=True))

    for i in range(k):
      c.append(b[i][0])

    return c

top_k([1,1,3,3,4,5],2)

nums를 for loop로 돌려서 count 함수로 키에 nums값 값에 count 값을 넣고 딕셔너리{1:2, 3:2, 4:1, 5:1}생성 후 a에 저장

a.items() 하게되면 리스트안에 튜플형식으로 키,값 [(1,2),(3,2),(4,1),(5,1)] 생성

b라는 변수에 a변수(딕셔너리)안에 값을 lamda x로 튜플을 하나씩 (x[1]=값,x[0]=키) 값을 기준으로 내림차순 정렬 하여 리스트 b에 저장

b에서 많이 나온순 2개 출력해야하므로
for loop로 k 만큼 돌려서 c리스트의 index 0번째의 튜플 index 0번째(키)를 리스트c에 추가

Counter 라이브러리를 이용한 방법

from collections import Counter

def top_k(nums, k):
  b=[]
  a=Counter(nums).common(k)
  for i in range(k):
    b.append(a[i][0])
  return b
  
top_k([1,1,3,3,4,5],2)

Counter함수가 nums의 각요소의 개수를 세어 딕셔너리 형태로 만들고
.common은 그 딕셔너리중 값이 큰 순으로 k개를 추출해 낸다. items()의 함수와 max를 합친느낌? 찾다보니 이런 라이브러리도 있어서 사용해 봤다.

0개의 댓글