<Programmers> 원소들의 곱과 합

·2024년 6월 29일
0

프로그래머스

목록 보기
4/18
post-thumbnail

문제

정수가 담긴 리스트 num_list가 주어질 때,
모든 원소들의 곱모든 원소들의 합의 제곱보다 작으면 1을 크면 0을 return하도록 solution 함수를 완성해주세요.


나의 풀이

  1. 모든 원소들의 곱 값과 모든 원소들의 합의 제곱의 값을 각각의 변수에 할당한다.
  2. 둘을 비교하여 return한다.
function solution(num_list) {
  let multiplicationValue = num_list.reduce((acc, cur) => {
      return acc * cur;
    }, 1);

  let squareValue =
      num_list.reduce((acc, cur) => {
        return acc + cur;
      }, 0) ** 2;

    return multiplicationValue < squareValue ? 1 : 0;
}

reduce 메서드 너무 편리한걸?


다른 풀이

function solution(num_list) {
    let accMul = 1
    let accSum = 0
    for (const num of num_list) {
        accMul *= num
        accSum += num
    }
    return accMul < accSum ** 2 ? 1 : 0
}

마주했던 문제들

기존 내 코드는 아래와 같다.

function solution(num_list) {
  let multiplicationValue = num_list.reduce((acc, cur) => {
      return acc * cur;
    }, 1);

  let squareValue =
      num_list.reduce((acc, cur) => {
        return acc + cur;
      }, 1) ** 2;

    return multiplicationValue < squareValue ? 1 : 0;
}

정답 코드와 무엇이 다른지 잘 봐야 알 수 있다.

합의 제곱 코드에서 초기값 설정하는 부분이 다르다.

// 정답 코드
  let squareValue =
      num_list.reduce((acc, cur) => {
        return acc + cur;
      }, 0) ** 2;

// 틀린 코드
  let squareValue =
      num_list.reduce((acc, cur) => {
        return acc + cur;
      }, 1) ** 2;

자꾸 case 2만 틀리는 것이 아닌가?

아니 대체 뭐지.. 하고 생각하던 찰나에, 간과하고 있던 부분을 지적해주신 한 분이 있었다.

reduce() 메서드 초기값을 1로 설정했다면, 곱셈연산에서와 덧셈에서 어떤 차이가 있을지 생각해봐야 한다.

그렇다.. 곱셈에서는 초기값을 1로 설정해도 큰 차이가 없지만, 덧셈연산이라면 말이 다르다.

덧셈연산에서 초기값을 1로 설정하고, 그 값을 제곱연산 해버린다면 내가 예상하지 못한 값이 충분히 나올 수 있다!

오늘도 이렇게 하나 배웠다.

profile
- 배움에는 끝이 없다.

0개의 댓글