본문 바로가기
알고리즘 Node.js

백준 2480문제. 주사위 세개

by 반갑조? 2025. 2. 28.

문제

문제: 1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.

  1. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.
  2. 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.
  3. 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.

예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3×100으로 계산되어 1,300원을 받게 된다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2×1,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그중 가장 큰 값이 6이므로 6×100으로 계산되어 600원을 상금으로 받게 된다.

3개 주사위의 나온 눈이 주어질 때, 상금을 계산하는 프로그램을 작성 하시오.

 

입력: 첫째 줄에 3개의 눈이 빈칸을 사이에 두고 각각 주어진다.

 

출력: 첫째 줄에 게임의 상금을 출력 한다.

 

예제 입력: 3 3 6   또는  2 2 2     또는   6 2 5

예제 출력: 1300   또는  12000   또는  600

 

풀이

const fs = require('fs');
const input = fs.readFileSync(0, "utf-8").trim().split(" ").map(Number);
const [a, b, c] = input;

if(a === b && b === c){
  console.log(10000 + a * 1000);
} else if (a === b && a !== c) {
  console.log(1000 + a * 100);
} else if (a === c && a !== b) {
  console.log(1000 + a * 100);
} else if (b === c && b !== a) {
  console.log(1000 + b * 100);
} else{
  console.log(Math.max(a, b, c) * 100);
}

 

풀이 해석

1. 모든 숫자가 같은 경우

- a === b && b === c

2. 두 개의 숫자만 같은 경우

- a === b && a !== c는 a와b는 같지만 a와c는 같지 않다는 의미.

- a === c && a !== b는 a와c는 같지만 a와b는 같지 않다는 의미.

- b === c && b !== a는 b와c는 같지만 b와a는 같지 않다는 의미.

3. 모두 다른 경우

- Math.max()메서드는 가장 큰 숫자를 반환하므로 최대값을 구해서 100을 곱한다.

 

더 알아보기

1. 또 다른 정답

const fs = require('fs');
const input = fs.readFileSync(0, "utf-8").trim().split(" ").map(Number);

const [a, b, c] = input;

if (a === b && b === c) { // 세 개 모두 같은 경우
    console.log(10000 + a * 1000); 
} else if (a === b || a === c || b === c) { // 두 개만 같은 경우
    let same = a === b || a === c ? a : b; // 같은 숫자 찾기
    console.log(1000 + same * 100);
} else { // 모두 다를 경우
    console.log(Math.max(a, b, c) * 100);
}

해석: 

1. 입력값을 숫자로 변환해서 [a, b, c] 변수에 저장한다.

2. 세 개가 모두 같은 경우

- if(a === b && b === c)

3. 두 개만 같은 경우

- else if(a === b || a === c || b === c){ let same = a === b || a === c ? a : b; }

   - 두 개만 같다면, a==b 또는 a==c이면 같은 숫자는 a이고, 아니면 b가 같기때문에 삼항연산자를 사용하여 let변수에 저장한다.

4. 모두 다 다른 경우

- 가장 큰 숫자를 찾는 메서드인 Math.max()를 사용한다.

 

2. 느낀점

- 이번엔 두 개의 숫자만 같을 경우를 어떻게 해야하나 고민했다.

- 하나하나 풀어서 else if를 사용하여 정답임을 보았지만 좀 더 좋은 코드가 있을거라고 생각했다.

- 역시 여러가지의 좋은 코드들이 있었다. 그것들을 보면서 익히고 내 것으로 만들 수 있다는게 좋다고 생각한다.