문제
문제: 1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.
- 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.
- 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.
- 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×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를 사용하여 정답임을 보았지만 좀 더 좋은 코드가 있을거라고 생각했다.
- 역시 여러가지의 좋은 코드들이 있었다. 그것들을 보면서 익히고 내 것으로 만들 수 있다는게 좋다고 생각한다.
'알고리즘 Node.js' 카테고리의 다른 글
백준 10950문제. A+B -3 (0) | 2025.03.02 |
---|---|
백준 2739문제. 구구단(3단계 시작) (0) | 2025.03.01 |
백준 2525문제. 오븐 시계 (0) | 2025.02.28 |
백준 2884문제. 알람 시계 (0) | 2025.02.27 |
백준 14681문제. 사분면 고르기 (0) | 2025.02.27 |