TIL - CodeKata(9)

김영훈·2021년 4월 9일
0

ETC

목록 보기
9/34

# 문제

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):
    x = list(set(nums))
    y = {}
    w = []
   
    for v in x:

        y['{}'.format(v)] = nums.count(v)

    z = [x for x in y.values()]
    print(z)
    reversed_y = dict(map(reversed, y.items()))

    for i in range(1,k+1):
        max_num = max(z)
        w.append(int(reversed_y[max_num]))
        z.remove(max_num)
        print(z)
        
    print(w)

    return w

# review

  • nums 배열에 존재하는 숫자의 개수를 count()로 구한 다음, 빈 딕셔너리 객체 ykey("숫자"):value(숫자 개수) 형태로 추가하였다.

  • 숫자의 개수 중에서 최댓값을 골라야 하므로 list comprehension으로 변수 zy.values()값을 담았다.

  • 딕셔너리 객체 y에서 숫자 개수가 최댓값인 숫자를 찾으려면, 딕셔너리 객체의 key와 value의 위치바꿔야 한다.

    • reversed_y = dict(map(reversed, y.items()))
    • reversed_y = {v:k for k, v in y.items()}
  • 개수가 가장 많은 숫자를 k개 찾으려면, 리스트 객체 z에서 최댓값을 k번 구해야 한다. for문을 이용해 반복 시행을 하자.

    • 최댓값차례로 구하려면, 반복 loof에서 max()로 얻은 최댓값을 변수 z에서 remove()삭제해야 한다.

    • 딕셔너리 객체의 key값string도, integer도 입력 가능하다.

  • 결괏값 list에 담길 요소는 정수이므로, int로 형변환한 후 객체 w에 담는 것을 잊지 말자.

    • w.append(int(reversed_y[max_num]))
profile
Difference & Repetition

0개의 댓글