[Codekata Week2] Day 4~5

문성호·2020년 9월 12일
0
  • Codekata 4~5는 처음으로 거의 못 풀뻔했다! 쉽지 않았지만 시간을 들이니 어떻게든 또 풀린다.

Day 4

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

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

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

return [1,2]

nums = [1]
k = 1

return [1]

My Solution

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도 조금 방식은 달랐지만 거의 대동소이한 풀이였던 것 같다.

Day 5

  • 문제
    인자인 height는 숫자로 이루어진 배열입니다.그래프로 생각한다면 y축의 값이고, 높이 값을 갖고 있습니다. 아래의 그래프라면 height 배열은 [1, 8, 6, 2, 5, 4, 8, 3, 7] 입니다.

    저 그래프에 물을 담는다고 생각하고, 물을 담을 수 있는 가장 넓은 면적의 값을 반환해주세요.
  • 가정
    배열의 길이는 2이상입니다.

My 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
  • 요 몇 달 알고리즘 문제들을 풀면서 느낀 점은 '컴퓨터는 멍청하다' 라는 것이었다.
    단 한 줄만 틀리거나 잘못 입력해도 컴퓨터는 융통성없이 에러를 산출한다.
    또한, 컴퓨터는 단지 '성능 좋은 계산기'에 불과하다라는 점이다.
    사람이 편하면, 컴퓨터는 괴롭다. 반대로 사람이 괴로우면, 컴퓨터는 편하게 수행한다.

  • 이 문제를 풀면서 위와 같은 느낌이 더욱 선명해졌다.
    컴퓨터는 문제를 이해하지 못하며 그저 주어진대로 계산만 한다. 편하게 계산만 할 수 있도록 만들어주는 역할이 프로그래머의 역할이 아닐까.
  • 이 문제의 풀이 아이디어는 생각보다 거창하지 않고 단순했다.
    nested loop를 통해 두 막대를 비교해서 낮은 높이 * 가로 길이를 계산하면 매우 간단하다.
  • 내 코드카타 짝은 문제를 이해하지 못했다. 결국 끝까지 풀지 못했고 내 코드를 보고서는 쉽게 풀었다고 부러워(?)했다. 그러나 나는 그 짝이 나보다 특별히 실력이 부족하거나 이해력이 부족해서라고 생각하지 않는다. 단지 컴퓨터가 멍청하기 때문에 우리가 다 풀어서 계산만 하도록 떠먹여 주는 것이 프로그래머의 역할이라는 것에 대해 느끼지 못했을 뿐이라고 생각한다.
profile
오늘을 모아 내일을

0개의 댓글