프로그래머스 Lv.0 주사위 게임 2

J·2023년 6월 9일
0

programmers

목록 보기
12/33

문제 링크

주사위 게임 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) × (52 + 32 + 32 ) = 11 × 43 = 473점을 얻습니다. 따라서 473을 return 합니다.

입출력 예 #3

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

풀이

  1. 그냥 문제를 읽으며 식을 써내려 감.

코드

 function solution(a, b, c) {
     return a != b && a != c && b != c
     ? a + b + c
     : a == b && a == c && b == c
     ? (a + b + c) * (a ** 2 + b ** 2 + c ** 2) * (a ** 3 + b ** 3 + c ** 3)
     : (a + b + c) * (a ** 2 + b ** 2 + c ** 2);
 }

다른 사람의 코드

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 함수
    1. Set() 메서드를 이용해 set객체 생성. (Set()은 배열에서 중복된 값을 제거하고, 중복값이 제거된 값들로 이루어진 새로운 객체를 반환.)
    2. 스위치문으로 set 객체의 길이에 따라 다른 case로 분류해 calculate 함수 사용함.
  • calculate 함수
    1. calculate() 함수는 입력된 배열 inc와 주어진 값이 있다면 n에 따라 계산한 결과임.
    2. 주어진 배열에서 세 개의 수에 대하여 각 수를 1부터 n까지의 지수로 거듭제곱을 수행한 결과를 모두 계산해 곱한 값 반환.
  • 위 두 함수의 작동이 종합되어 입력된 a, b, c에 대해 주어진 규칙으로 계산된 결과 반환.

생각

  • 공부하려고 기록해놓음.
profile
벨로그로 이사 중

0개의 댓글

관련 채용 정보