문제
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개가 일치할 경우, 2개가 일치할 경우, 모두 다를 경우 3가지의 조건에 따라 결과가 달라진다.
같은 눈이 세개일 경우 모든 주사위의 값이 동일하기 때문에 10000 + a * 1000으로 처리할 수 있으며
두 개의 값이 같은 경우는 세 가지 경우가 존재하는데 3개 중 두개가 동일하다는 것은
(a,a,b), (a,b,a), (b,a,a)처럼 한 포인트에서 일치하는 일이 두번 일어난다는 의미기도 하다.
그렇기 때문에 하나의 위치를 고정해서 a === b, b === c로 체크할 경우 a === c만 따로 체크하면
b가 공통적으로 들어가는 값은 1000 + b * 100으로 처리할 수 있고
나머지 경우는 a 또는 c * 100을 더하면 된다.
마지막의 경우는 else들의 최종 종착지의 값으로 a, b, c 중 가장 큰 값에 100을 곱하는 것이기 때문에
Math.max로 최대값을 구한 다음 100을 곱해 미리 result에 배정해서 처리했다.
const [a, b, c] = require('fs').readFileSync('/dev/stdin').toString().trim().split(" ").map(Number)
let result = Math.max(a,b,c)*100
if(a===b && b===c){
result = 10000 + a * 1000
}
else if(a===b || b===c){
result = 1000 + b * 100
}
else if(a===c){
result = 1000 + a * 100
}
console.log(result)
const [a, b, c] = `3 3 6`.split(" ").map(Number)
let result = Math.max(a,b,c)*100
if(a===b && b===c){
result = 10000 + a * 1000
}
else if(a===b || b===c){
result = 1000 + b * 100
}
else if(a===c){
result = 1000 + a * 100
}
console.log(result)'알고리즘 > 백준' 카테고리의 다른 글
| [백준 JS] 2845번 파티가 끝나고 난 뒤 (0) | 2023.03.09 |
|---|---|
| [백준 JS] 2742번 기찍 N (0) | 2023.03.09 |
| [백준 JS] 2440번 별 찍기 - 3 (0) | 2023.03.09 |
| [백준 JS] 2439번 별 찍기 - 2 (0) | 2023.03.09 |
| [백준 JS] 1264번 모음의 개수 (0) | 2023.03.08 |
