코딩테스트 문제 풀기 Lv0 원소들의 곱과 합

휘루·2024년 6월 20일
0

코딩테스트

목록 보기
11/13

문제 설명

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

제한사항

2 ≤ num_list의 길이 ≤ 10
1 ≤ num_list의 원소 ≤ 9

입출력 예

num_list result
[3, 4, 5, 2, 1] 1
[5, 7, 8, 3] 0

입출력 예 설명

입출력 예 #1

모든 원소의 곱은 120, 합의 제곱은 225이므로 1을 return합니다.

입출력 예 #2

모든 원소의 곱은 840, 합의 제곱은 529이므로 0을 return합니다.

function solution(num_list) {
    // 3 x 4 x 5 x 2 x 1 = 120, 15의 제곱은 225
    let multiNum = num_list.reduce((acc, cur) => acc * cur);
    console.log(multiNum);
    
    
    // 5 x 7 x 8 x 3 = 840, 23의 제곱은 529
    let squareNum = num_list.reduce((acc, cur) => acc + cur);
    let dualNum = squareNum * squareNum;
    console.log(dualNum);
    
    if (dualNum > multiNum) {
        return 1;
    } else {
        return 0;
    }
    
    // num_list 모든 원소들의 곱 < num_list 모든 원소들의 합의 제곱이면 1
    // num_list 모든 원소들의 곱 > num_list 모든 원소들의 합의 제곱이면 0
    
    // 모든 곱이 모든 제곱보다 작으면 1
    // 모든 곱이 모든 제곱보다 크면 0
    
    // return 작으면 1, 크면 0
    
    // return answer;
}

해석

  • 제곱인 multiNum을 reduce를 써서 acc로 누적 계산, cur로 요소들을 계산합니다.

  • 즉 [3, 4, 5, 2, 1]을 acc로 누적해서 cur 개수 만큼 곱합니다.
    (3 x 4 x 5 x 2 x 1) 그럼 모든 원소의 곱이 계산됩니다.

  • 두번째로 제곱을 구해야 합니다. [3, 4, 5, 2, 1]을 acc + cur로 덧셈합니다.

  • 따로 let을 담습니다. dualNum을 생성해 위의 덧셈한 값을 똑같이 곱합니다.
    변수명이 multiNum이면 let dualNum = multiNum x multiNum으로 작업합니다.

  • 제곱하여 결과를 받을 수 있습니다. 이제 조건에 따라 작동시키도록 합니다.

  • if (제곱 값 > 곱셈 값) 합의 제곱 값이 크면 return 1, 합의 제곱 값이 작으면 0으로 리턴합니다.

다른 사람의 풀이

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 mul = num_list.reduce((a, c) => {return a*c ;}, 1);
    let sum = num_list.reduce((a, c) => {return a+c ;}, 0);
    return (mul < sum*sum) ? 1 : 0;
}
function solution(num_list) {
    return Math.pow(num_list.reduce((a,b) => a+b), 2) > num_list.reduce((a,b) => a*b) ? 1 : 0;
}
function solution(num_list) {
    let product = num_list.reduce((acc, i) => acc * i);
    let sum = num_list.reduce((acc, i) => acc + i);
    return product < sum * sum ? 1 : 0;
}
function solution(num_list) {
    let mult = num_list.reduce((acc, val) => acc * val, 1);
    let sumSQ = num_list.reduce((acc, val) => acc + val, 0) ** 2;
    return mult > sumSQ ? 0 : 1;
}

저는 몇 수십줄을 썼는데 다들 간략하게 잘 작성하시네요

profile
반가워요

0개의 댓글

Powered by GraphCDN, the GraphQL CDN