TIL87. CodeKata : 연속적인 요소를 더했을 때 가장 큰 값 반환하기 문제

9611 단어 codekatacodekata

🌈 연속적인 요소를 더했을 때 가장 큰 값 반환하기 문제


🤔 나의 Solution

숫자로 이루어진 리스트 nums를 인자로 주면, 그 안에서 어떤 연속적인 요소를 더했을 때 가장 큰 값이 나오나요? 가장 큰 값을 찾아 return해주세요.

✔️ 배열 nums에 [-2,1,-3,4,-1,2,1,-5,4]이 주어진다면, 6을 반환한다. [4, -1, 2, 1] 을 더할 때 나오는 6이 가장 크기 때문이다.

def maxSubArray(nums):
  for i in range(1, len(nums)):
    if nums[i-1] > 0:
      nums[i] += nums[i-1] 
      # print(f"i : {i} / num: {nums}")
  return max(nums)
print(maxSubArray([-2,1,-3,4,-1,2,1,-5,4]))

✔️ nums를 index 1부터 순회하며, i-1번째 수가 0보다 클 때만 i번째 수와 i-1수를 더해 i번째 요소로 바꿔주는 방법으로 해결했다.

✔️ i-1번째가 0보다 작다면, 왼쪽부터 순회하며 더하기 때문에 더하는 것에 의미가 없기 떄문이다.

✔️ 배열이 순회하는 과정을보면 아래와 같다.

i : 2 / num: [-2, 1, -2, 4, -1, 2, 1, -5, 4] # 👈 2번 요소를 i-1, i를 합친 값으로 수정
i : 4 / num: [-2, 1, -2, 4, 3, 2, 1, -5, 4]  # 👈 4번 요소를 i-1, i를 합친 값으로 수정
i : 5 / num: [-2, 1, -2, 4, 3, 5, 1, -5, 4]  # 👈 5번 요소를 i-1, i를 합친 값으로 수정
i : 6 / num: [-2, 1, -2, 4, 3, 5, 6, -5, 4]  # 👈 6번 요소를 i-1, i를 합친 값으로 수정
i : 7 / num: [-2, 1, -2, 4, 3, 5, 6, 1, 4]   # 👈 7번 요소를 i-1, i를 합친 값으로 수정
i : 8 / num: [-2, 1, -2, 4, 3, 5, 6, 1, 5]   # 👈 8번 요소를 i-1, i를 합친 값으로 수정

✔️ 요소가 더해진 다음에 다음 i번째에서 양수라면 한번 더 더해지기 때문에 2중으로 모두 순회할 필요없이 해결할 수 있다.

좋은 웹페이지 즐겨찾기