문제설명
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 함수를 사용한 것이 특이점.
어떤게 좋은 코드일지 잘 모르겠음
'frontend > javaScript' 카테고리의 다른 글
[js / 알고리즘연습] 이어 붙인 수 (0) | 2024.09.12 |
---|---|
[js / 알고리즘연습] 원소들의 곱과 합 (0) | 2024.09.12 |
[js / 알고리즘연습] 등차수열의 특정한 항만 더하기, (0) | 2024.09.12 |
[js 기본기] arguments, Promise.all(), Promise.race() (0) | 2024.08.22 |
[js 기본기] Nullish coalescing operator, prototype 메소드 (0) | 2024.08.21 |