frontend/javaScript

[js / 알고리즘연습] 주사위게임2

김포레스트 2024. 9. 12. 10:32

 

문제설명

 

1부터 6까지 숫자가 적힌 주사위가 세 개 있습니다. 세 주사위를 굴렸을 때 나온 숫자를 각각 a, b, c라고 했을 때 얻는 점수는 다음과 같습니다.

세 숫자가 모두 다르다면 a + b + c 점을 얻습니다.
세 숫자 중 어느 두 숫자는 같고 나머지 다른 숫자는 다르다면 (a + b + c) × (a2 + b2 + c2 )점을 얻습니다.
세 숫자가 모두 같다면 (a + b + c) × (a2 + b2 + c2 ) × (a3 + b3 + c3 )점을 얻습니다.
세 정수 a, b, c가 매개변수로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.

 

 

풀이 과정

 

뭔가 깔쌈하게 풀고싶었는데 잘 안됐다.....

각 조건을 변수에 담아서 분기처리 하고...

식도 변수에 담아서 곱해주

 

 

나의 풀이

function solution(a, b, c) {
    const sum = a + b + c;
    const squarSum = a ** 2 + b ** 2 + c ** 2;
    const cubeSum = a ** 3 + b ** 3 + c ** 3;
    
    const allSame = (a==b) && (b==c);
    const oneSame = (a==b) || (b==c) || (a==c);

    if(allSame) {
        return sum * squarSum * cubeSum;
    } else if(oneSame)  {
        return sum * squarSum;
    } else { 
        return sum;
    }
}

 

 

 

best 풀이

const solution = (a, b, c) => {
    const set = new Set([a, b, c]);
    switch ([...set].length) {
        case 1: return calculate([a, b, c], 3);
        case 2: return calculate([a, b, c], 2);
        case 3: return calculate([a, b, c]);
    }
};

const calculate = (inc, n=1) => {
    const [a, b, c] = inc;
    let result = 1;
    for (let i = 1; i <= n; i++) {
        result *= Math.pow(a, i) + Math.pow(b, i) + Math.pow(c, i)
    }

    return result;
};

 

 

solution과 calculate로 나눈 것,

calculate 함수를 사용한 것이 특이점.

 

어떤게 좋은 코드일지 잘 모르겠음