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
nums 배열에 존재하는 숫자의 개수를 count()
로 구한 다음, 빈 딕셔너리 객체 y에 key("숫자"):value(숫자 개수)
형태로 추가하였다.
숫자의 개수 중에서 최댓값을 골라야 하므로 list comprehension으로 변수 z에 y.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]))