Web, View/코딩테스트 연습

[JavaScript] 원소들의 곱과 합 - 181929

kaleb 2023. 12. 7. 14:14
728x90

안녕하세요 미어캣입니다.

 

오늘은 프로그래머스 기초문제 원소들의 곱과 합 문제를 풀어보도록 하겠습니다.

 

문제설명 :

 

정수가 담긴 리스트 num_list가 주어질 때, 모든 원소들의 곱이 모든 원소들의 합의 제곱보다 작으면 1,

크면 0을 return 하는 soulution 함수를 완성하시오.

 

제한사항 :

2<= num_list의 길이 <= 10

1<= num_list의 원소 <= 9

 

문제 : 

function solution(num_list) {
    var answer = 0;
    return answer;
}

 

 

이번 문제는 리스트의 값들을 구하는 방법, 그 원소들의 합, 곱 을 구하는 방법들을 고민 할 수 있는 문제입니다.

 

정답 : 

 

더보기
function solution(num_list) {

    //제한사항을 위한 변수
    let len = str.length;
    let min = Math.min(...str);
    let max = Math.max(...str);
    
    let answer = 0;
    let multiply = 1;
    let add = 0;
    
    if((len >=2 && len <= 10) && (min >= 1 && max <= 9)) { // 제한사항
        for(let a of num_list) { //모든 원소들의 곱
            multiply *= a;
            add += a; // 모든 원소들의 합
        }

        // if(mutiply < Math.pow(add, 2))
        if(multiply < (add*add))
            return 1;
        else 
            return 0;
    }
}

 

처음에는 저도 for문 을 쓰려고했으나 어차피 값들이 열거형식으로 사용될 것 같아서 for of문을 사용하였습니다.

 

모든 원소들의 곱, 합을 구한 후 이를 비교하는 방식으로 문제를 풀었는데,

 

시간이 지나고 다시 문제를 보니깐 너무 길어진 것 같기도하고, reduce를 사용하는 방식이

 

훨씬 JavaScript느낌 같아서 수정해 보았습니다.

 

const solution = (str) => {
    
    //제한사항을 위한 변수
    let len = str.length;
    let min = Math.min(...str);
    let max = Math.max(...str);
    
    if((len >=2 && len <= 10) && (min >= 1 && max <= 9)) { // 제한사항
        let x = str.reduce((a, b) => a *= b); // 모든 원소들의 곱
        let pow = Math.pow(str.reduce((a,b)=> a += b), 2) // 모든 원소들의 합의 제곱

        if(x < pow)
            return 1;
        else
            return 0;
    }
}

 

기존에 Java베이스 코딩을 했었기에 코드가 굉장히 Java스러워서

 

최근의 JavaScript에서는 const형식(함수 표현식)이 선호되고있어 사용빈도를 늘려보고있습니다.

 

Array.reduce :

JavaScript의 reduce 함수는 배열의 각 요소에 대해 주어진 콜백함수를 실행하여 결과를 축소하는 함수입니다.

배열의 각 요소를 순회하며 누적된 값을 계산하거나 배열을 단일 밗으로 변환하는데 유용한 함수

 

라서 앞으로도 많이 사용하게 될 함수 입니다. 이번에 알게되어서 사용 빈도를 늘려보려고합니다.

 

제한사항을 설정한 후 reduce와 Math 함수를 활용하여 모든 원소들의 곱, 모든 원소들의 합의 제곱을 구한 뒤

 

간단하게 비교하였습니다.

 

비교적 쉬운 문제였지만 풀 수 있는 방식이 다양해서 활용법을 익히는데 도움이 많이 되는 문제였습니다.

 

감사합니다. 파이팅...!

반응형