Post

주사위 게임2

https://school.programmers.co.kr/learn/courses/30/lessons/181930

📔 문제 설명

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 함수를 작성해 주세요.

💡 입출력 예

abcresult
2619
533473
444110592

💻내가 작성한 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function solution(a, b, c) {
  const calcPow = (count) => {
    var sum = 1;
    for (let i = 1; i <= count; i++) {
      sum *= Math.pow(a, i) + Math.pow(b, i) + Math.pow(c, i);
    }
    return sum;
  };

  if (a !== b && b !== c && a !== c) return a + b + c;
  if ((a === b && a !== c) || (a === c && a !== b) || (b === c && a !== b))
    return calcPow(2);
  if (a === b && a === c) return calcPow(3);
}

💻다른 사람 코드

new Set을 이용해서 중복 제거, calculate함수 만들어서 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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;
};
This post is licensed under CC BY 4.0 by the author.