[Algorithm] 2주차 4번 문제

김상웅·2022년 6월 16일
0

[알고리즘]

목록 보기
7/18

📌 문제


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

가장 자주 등장한 숫자를 k 개수만큼 반환하는 프로그램을 작성해주세요.

예를 들어,

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

return [1,2]

 

nums = [1]
k = 1

return [1]


✅ 풀이


우선 문제 분석은 다음과 같습니다.

배열에서 각 숫자가 등장하는 개수를 알아야합니다.

인자로 받는 k는 그 개수들을 내림차순으로 정렬했을 때 k번째 값을 가리킵니다.

개수를 비교하기 위해 새로운 {}를 선언해줍니다.

딕셔너리의 key에는 리스트 내부의 중복을 없앤 숫자를 값으로 넣습니다.

딕셔너리의 value 에는 각 숫자의 개수를 값으로 넣습니다.

이 value를 기준으로 내림차순 정렬을 했을 때 0번째 값부터 k번째 값까지 해당하는 key 값을 반환해주면 됩니다.

코드로 알아보겠습니다.

def answer(nums, k) :
   new_dict = {}
   result = []
  
   for num in nums:
     if num in new_dict :
       new_dict[num] += 1
     else: 
       new_dict[num] = 1

   value_list = sorted(new_dict.values(), reverse=True)[:k]

   for i in new_dict :
     if new_dict[i] in value_list :
       result.append(i)
      
   for i in new_dict :
     if new_dict[i] in value_list :
       result.append(i)
     
   return result

sort(reverse=True)
sort() 함수는 인자로 받는 값을 오름차순으로 정렬해주는 함수입니다.

reverse 속성을 True로 지정해주면 내림차순으로 정렬해주게 됩니다.

위의 코드에서 반복문을 통해 List와 Dictionary를 만드는 코드를 줄일 수 있는데요.

List ComprehensionDictionary Comprehension을 통해 해결할 수 있습니다.

아래 코드를 통해 알아보겠습니다.

def answer(nums, k) :
	new_dict = {count(num) : num for num in set(nums)}
    
    key_list = sorted(new_dict.keys(), reverse=True)[:k]
    
    return [new_dict[i] for i in value_list]

흥미로운 풀이 방법인 것 같네요!

`

profile
누구나 이해할 수 있도록

0개의 댓글