[Code-kata] week4 - day4 : JavaScript

nomadhj·2022년 6월 5일
0

Code-kata

목록 보기
5/6

Code-kata week4 - day4 문제 자바스크립트 풀이


- 문제

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

Input: [-2,1,-3,4,-1,2,1,-5,4],
Output: 6

설명: [4,-1,2,1] 를 더하면 6이 가장 크기 때문

- 나의 풀이

  • 주어진 Input의 숫자들이 어떤 규칙을 통해 나열 된 것이 아니기 때문에 최대 값을 찾기 위해서 다 해보는 수밖에 없다고 판단했다.
  • 하나의 수를 고정하고 계속 더해보는 방식으로 구현해보고자, 이중 for 문을 활용하였다.
  • 최초 max는 음의 무한대, 그리고 매 반복문마다 고정 값으로 사용한 값을 sum으로 지정하고, 하나씩 수를 더해가며 max와 비교, 더 클 경우 max에 대입하는 식으로 코드를 구현하였다.
      const maxSubArray = (nums) => {
        let max = -Infinity;
        let sum = 0;

        for (let i = 0; i < nums.length; i++) {
          sum = nums[i];
          for (let j = i; j < nums.length; j++) {
            if (i === j) {
              sum += 0;
            } else {
              sum += nums[j];
            }
            max = sum > max ? sum : max;
          }
        }

        return max;
      };
  • 이 문제를 풀 때 주의 할 점은 i와 j의 값이 다를 때만 있는 것이 아니라 같을 때의 경우도 고려해야 된다는 점이다. i와 j가 같다는 말은 즉, 그냥 그 요소값 자체로 최대 값이 될 수도 있는 경우를 말하는 것으로, 이때는 sum에 어떠한 값도 더하지 말고 바로 최대 값과 비교해보아야 한다.
    이 부분만 주의한다면 어려운 부분은 없는 문제라 생각 된다.
profile
프론트엔드 개발과 맥주에 관심 있습니다.

0개의 댓글