본문 바로가기

코테/프로그래머스

[코딩 기초 트레이닝] 원소들의 곱과 합

728x90

[코딩 기초 트레이닝] 원소들의 곱과 합

문제 링크

구분

코딩 테스트 연습 > 코딩 기초 트레이닝

풀이 요약

배열 num_list의 모든 원소의 곱이 합의 제곱보다 작으면 1, 크면 0을 반환하는 문제

나의 풀이

function solution(num_list) {
    const plus_num=num_list.reduce((acc,cur)=>acc+cur)
    const multiple_num=num_list.reduce((acc,cur)=>acc*cur)
    const squared_num=Math.pow(plus_num,2)
    if(multiple_num<squared_num){
        return 1
    }else{
        return 0
    }
}

reduce 메서드는 기본적으로 두개의 인자 **(acc: accumulator 누적값, cur:current 현재 돌고 있는 요소)**를 갖습니다.

초기 값을 설정할 수도 있지만 옵셔널 값(필수가 아닌 값) 이기 때문에 필요시 작성해줍니다.

주의할 점은 acc의 초기값을 할당하는 순간 cur은 index가 1부터가 아닌 0부터 카운트 됩니다.

Math 메서드의 pow()는 pow(밑값, 밑을 제곱하기 위한 지수) 로 사용됩니다.

따라서 더한값의 제곱값을 구하기 위해 squared_num=Math.pow(plus_num,2) 로 작성해주었습니다.

이 문제는 단순 계산이라 차이가 크게 없지만 코드가 길고 복잡할 경우에는, squared_num=plus_num**2 로 바꿔서 사용하는 것이

속도면에서 좋습니다. (Math.pow는 내장 함수이기 때문)

배운점

자바스크립트에서는 문제가 되지않지만, 파이썬에서는 **와 Math.pow가 다르게 답이 나올 수도 있다는 것을 알게되었습니다.

두 방법 모두 부동소수점 계산을 수행하지만, 피연산자에 따라 **는 정수를 반환할 수 있는 반면,

Math.pow는 항상 부동소수점 결과를 (float형) 반환한다는 점에서 차이가 있습니다.

또한 속도 측면에서 **가 math.pow가 빠르다는 것을 알게되었습니다.

728x90