[JavaScript] Lv0 - 주사위 게임 2

Moon·2024년 12월 9일
0
post-thumbnail

주사위 게임 2


문제 설명

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

  • 세 숫자가 모두 다르면 a + b + c 점을 얻습니다.
  • 세 숫자 중 어느 두 숫자는 같고 나머지 다른 숫자는 다르면 (a + b + c) × (a² + b² + c²) 점을 얻습니다.
  • 세 숫자가 모두 같다면 (a + b + c) × (a² + b² + c²) × (a³ + b³ + c³) 점을 얻습니다.

세 정수 a, b, c가 매개변수로 주어질 때, 얻는 점수를 return하는 solution 함수를 작성해주세요.

제한사항

  • a, b, c는 1이상 6이하의 정수입니다.

입출력 예

abcresult
2619
533473
444110592

입출력 예 설명

입출력 예 #1

예제 1번에서 세 주사위 숫자가 모두 다르므로 2 + 6 + 1 = 9점을 얻습니다. 따라서 9를 return 합니다.

입출력 예 #2

예제 2번에서 두 주사위 숫자만 같으므로 (5 + 3 + 3) × (5² + 3² + 3²) = 11 × 43 = 473점을 얻습니다. 따라서 473을 return 합니다.

입출력 예 #3

예제 3번에서 세 주사위 숫자가 모두 같으므로 (4 + 4 + 4) × (4² + 4² + 4²) × (4³ + 4³ + 4³) = 12 × 48 × 192 = 110,592점을 얻습니다. 따라서 110592를 return 합니다.


코드

function solution(a, b, c) {
    const sum = a + b + c;            // 세 주사위 수의 합
    const sumOfSquares = a**2 + b**2 + c**2;  // 세 수의 제곱 합
    const sumOfCubes = a**3 + b**3 + c**3;    // 세 수의 세제곱 합

    // a, b, c가 모두 같은지 확인
    if (a === b && b === c) {
        return sum * sumOfSquares * sumOfCubes;
    }

    // a, b, c 중 정확히 두 수만 같은지 확인
    // 방법 1: 집합(set)을 이용해 유일한 값의 개수 확인
    // let uniqueCount = new Set([a,b,c]).size;
    // uniqueCount가 2라면 두 수만 같다는 의미

    // 방법 2: 조건문 직접 사용
    if (a === b || b === c || a === c) {
        return sum * sumOfSquares;
    }

    // 세 수 모두 다를 경우
    return sum;
}

코드 설명

  1. 기본 계산
    • sum = a + b + c: 세 주사위에서 나온 수를 모두 더합니다.
    • sumOfSquares = a² + b² + c²: 제곱값들의 합을 구합니다.
    • sumOfCubes = a³ + b³ + c³: 세제곱값들의 합을 구합니다.
  2. 세 수의 관계 판단
    • 모두 같은 경우: a === b && b === c 만약 세 수가 모두 같다면 문제에서 요구한 식 (sum) × (sumOfSquares) × (sumOfCubes)를 반환합니다.
    • 두 수만 같은 경우: 세 수 중에서 정확히 두 수만 같은 경우를 판별하기 위한 조건은 다음과 같습니다.
      if (a === b || b === c || a === c) {
          // 이 시점에서 모두 같지는 않으므로
          // 정확히 두 수만 같은 경우입니다.
          return sum * sumOfSquares;
      }
      
      이 경우 (sum) × (sumOfSquares)를 반환합니다.
    • 모두 다른 경우: 위의 두 조건에 해당하지 않으면 세 수는 모두 다른 것이므로 (a + b + c) 값을 반환합니다.
profile
MOON.DEVLOG

0개의 댓글