* 문제
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):
numDict = dict()
numSet = set(nums)
maxList = []
for i in range(len(nums)):
if nums[i] not in numDict:
numDict[nums[i]] = 1
else:
numDict[nums[i]] += 1
for rank in range(k):
maxIndex = 0
maxNum = 0
for key, value in numDict.items():
if maxNum <= value:
maxNum = value
maxIndex = key
maxList.append(maxIndex)
del numDict[maxIndex]
maxList.sort()
return maxList
처음에 문제를 이해하는 것이 어려웠다. 자주 등장하는 숫자들을 k 개숫만큼 순위를 매기라는 뜻이었는데 그걸 이해하지 못해서 잘못 풀었다가 다시 코드를 갈아엎었다..
내 풀이 아이디어는 nums를 Dictionary에 Key, Value 형태로 받아 Key는 숫자를, Value에는 그 숫자의 등장횟수를 저장한 후, 그 Dictionary를 k만큼 돌면서 순서대로 최댓값을 찾아 list에 넣어 Return하게 하는 아이디어였다.
Model Solution도 조금 방식은 달랐지만 거의 대동소이한 풀이였던 것 같다.
def get_max_area(height):
maxArea = 0
area = 0
for i in range(len(height)):
for j in range(i, len(height)):
area = (j-i)*min(height[i],height[j])
if maxArea <= area:
maxArea = area;
return maxArea