[Algorithm]Toy Problem 08

안정태·2021년 5월 1일
0

Algorithm

목록 보기
8/50
post-thumbnail

문제 : largestProductOfThree

정수를 요소로 갖는 배열을 입력받아 3개의 요소를 곱해 나올 수 있는 최대값을 리턴해야 한다.

let output = largestProductOfThree([2, 1, 3, 7]);
console.log(output); // --> 42 (= 2 * 3 * 7)

output = largestProductOfThree([-1, 2, -5, 7]);
console.log(output); // --> 35 (= -1 * -5 * 7)

문제의 접근

세 수의 곱의 최댓값을 찾는 문제다. 너무 어렵게 생각하지 않고 바로 3중 for문을 돌렸다. 그중에서 중복된 수는 없어야 하기 때문에 인덱스가 같아지면 건너 뛰도록 continue를 실시해주었다. 그리고 그렇게 담긴 배열에서 최댓값을 찾는 것을 코드로 작성 해보았다.

const largestProductOfThree = function (arr) {
  // TODO: 여기에 코드를 작성합니다.
  let result = [];
  for(let i = 0; i < arr.length; i++){
    for(let j = 0; j < arr.length; j++){
      if(i === j){
        continue;
      }
      for(let z = 0; z < arr.length; z++){
        if(i === z || j === z){
          continue;
        }
        result.push(arr[i]*arr[j]*arr[z]);
      }
    }
  }
  let max = result[0];
  for(let i = 0; i < result.length; i++){
    if(result[i] > max){
      max = result[i]
    }
  }
  return max;
};

위 코드를 실행한다면 모든 테스트를 무사히 통과 할 수 있다. 하지만 이 과정에서 한가지 실수가 있었는데 바로 처음 max값을 0으로 줬던 것이다.

여기서 곱해서 나오는 값이 음수일 수도 있다는 걸 간과했다 그래서 이후에는 그냥 배열의 첫번 째 값을 max에 할당해줌으로 문제를 해결했다.

문제를 통해 생각해 볼 것

이번 문제는 생각보다 간단하게 해결할 수 있었다. 레퍼런스가 어떤 코드일지는 아직 모르겠지만 내 코드와 크게 벗어나지 않을 것 같다.
만약에 3수의 곱이 아니라 무작위의 수를 입력받는다면 어떻게 해야할까? 고민해보았다 그때는 재귀함수를 통해서 원하는 횟수 만큼 실행해주면 될 것 같았다.

profile
코딩하는 펭귄

0개의 댓글