Daily Coding - largestProductOfThree

CodeModel·2022년 10월 21일
0

Daily Coding

목록 보기
1/3

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

내가 푼 식

const largestProductOfThree = function (arr) {
  // TODO: 여기에 코드를 작성합니다.
  // 절대값을 구하고 배열을 다시 만든다
  let newarr = [];
  let tem
  let result
  for(let i = 0; i < arr.length; i++) {
    newarr[i] = Math.abs(arr[i])
  }
  // 제일 큰거를 순서대로 젤 왼쪽 배열에 놓는다
  for(let i = 0; i < newarr.length; i++) {
    for(let j = 0; j < newarr.length; j++) {
      if(newarr[j] < newarr[j+1]) {
        tem = newarr[j]
        newarr[j] = newarr[j+1]
        newarr[j+1] = tem
        console.log(newarr)
      }
    }
  }
  for(let i = 0; i < arr.length; i++) {
    if(arr[i] < 0) {
      newarr[i] = -newarr[i]
      console.log(newarr[i])
    }
  }
  // 배열에서 0,1,2 번째 인덱스 값을 곱한다
  result = newarr[0] * newarr[1] * newarr[2]
  return result
};

나는 양수, 음수 관계없이 절대값을 구한 다음에 제일 큰 수를 맨 앞 부터 채워 넣는 방법을 선택하였다. 이것은 정보처리기사 자격증을 공부할 때 사용한 선택정렬을 생각하며 만든 방법이다. 하지만 이 방법은 잘못되었었다.

테스트 결과중 -값과 -값을 곱해서 최대값을 구하는 것이 있었다. 나 또한 이 방법을 포함한 방법이라 생각하였으나 [-1,2,-3,4] 이 경우에는 2,3,4 를 뽑는 것이 아닌 -1,-3,4 를 뽑아야 하기 때문에 내 코드가 틀렸던 것 이다.

레퍼런스 답변은 전체를 올리지 않고 핵심만 올리고 해석해보겠다.

const sorted = arr.slice().sort((a, b) => a - b);
  const len = arr.length;
  const candi1 = sorted[len - 1] * sorted[len - 2] * sorted[len - 3];
  const candi2 = sorted[len - 1] * sorted[0] * sorted[1];
  return Math.max(candi1, candi2);
profile
개발자가 되기 위한 일기

0개의 댓글