본문 바로가기
코딩 생활/코딩테스트

[프로그래머스 | JS] 레벨 0. 원소들의 곱과 합

by everyhahaha 2023. 4. 24.

❓ 문제:  원소들의 곱과 합

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

📝 문제 풀이

num_list 배열의 원소들의 합의 제곱값을 ** 로 할지 Math.pow()로 할지 고민하다가

메서드보단 단순계산이 더 빠르겠다싶어서 변수에 넣어서 값을 리턴했다.

 

function solution(num_list) {
    let sum = num_list.reduce((a, b) => a + b);
    const multiple = num_list.reduce((a, b) => a * b);

    return multiple < sum * sum ? 1 : 0;
}

 

지금 생각해보면 변수에 넣으면 어차피 저장공간을 차지하기 때문에 return 문에서 바로 **2해줬으면 됐을텐데...

그래도 더 나은 방법을 찾는 이런 과정이 재밌다.

 

참고할만한 다른 풀이를 구경해봤다.

const solution=n=>+(n.reduce((a,v)=>a+v)**2>n.reduce((a,v)=>a*v))

 

아니 근데 삼항연산자로 1이나 0을 리턴하지 않는데 어떻게 통과된걸까 살펴보다가

불리언값을 숫자로 변환시켜서 반환하고 있다.

진짜 천재.....리스펙....

 

위 코드를 삼항연산자로 바꾸면 속도에 차이가 있는지 궁금해서 테스트해봤다.

(왼쪽) 숫자로 변환해서 값 리턴 (오른쪽) 삼항연산자 사용

 

근소하지만 숫자로 변환하는게 더 빠르다니,

그냥 조건문보다는 삼항연산자가 빨라서 애용했는데 앞으로 풀이에 참고해야겠다.


최근 프로그래머스에 새로운 레벨 0 문제가 생겨서 즐겁게 풀었는데

덕분에 등수도 많이 올랐다.

 

그래도 레벨 0은 아무래도 단순한 문제가 많다보니

실력보단 트릭이 쌓이는 느낌이다.

이제 다른 레벨로 넘어가봐야겠다.

모두 즐코하세요-!

댓글