반응형
Link
문제
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개의 눈이 빈칸을 사이에 두고 각각 주어진다.
출력 > 첫째 줄에 게임의 상금을 출력 한다.
제출
const fs = require("fs");
const stdin = (
process.platform === "linux"
? fs.readFileSync("/dev/stdin").toString()
: `6 2 5`
)
.split(" ")
.map(Number)
.sort((a, b) => a - b);
const [x, y, z] = stdin;
if (x === y && y === z) {
console.log(10000 + x * 1000);
} else if (x === y || y === z) {
console.log(1000 + y * 100);
} else {
console.log(z * 100);
}
풀이과정
먼저, 입력 값을 sort()를 사용하여 오름차순으로 정렬한다.
그 다음 세 값이 모두 같을 때의 조건문과 두 개의 값만 같을 때의 조건문을 작성한다.
x === y || y === z 조건문에서 두 개의 값만 비교해줘도 괜찮은 이유는 앞에서 숫자를 오름차순으로 정렬해주었기 때문에 x와 z가 같으려면 x,y,z 세 개의 숫자가 같을 때 밖에 없다.
그리고 마지막으로는 가장 큰 값인 z에 *100을하여 출력한다.
개념
sort()
- 배열의 요소를 정렬한 후 그 배열을 반환한다. (복사본이 아님에 주의)
- 매개변수에 compareFunction을 생략하면 배열 요소의 문자열 변환에 따른 유니 코드 값에 따라 정렬된다.
const fruits = ['바나나', '사과', '수박' , '딸기'];
fruits.sort();
console.log(fruits); // [ '딸기', '바나나', '사과', '수박' ]
const numbers = [1, 23, 12, 5, 46];
numbers.sort();
console.log(numbers); // [ 1, 12, 23, 46, 5 ]
메소드의 매개변수가 없는 경우, 문자열로 변환하고 문자의 유니 코드 순서에 따라서 정렬된다.
따라서 숫자를 오름차순으로 정렬하기 위해서는 compare 함수를 사용해주어야한다.
비교값이 a와 b라고 할 때, compareFunction이 반환하는 값에 따라 정렬 결과가 달라진다.
function compare(a, b) {
if (a is less than b by some ordering criterion) {
return -1;
}
if (a is greater than b by the ordering criterion) {
return 1;
}
// a must be equal to b
return 0;
}
반환값이 0보다 작은 경우, a가 b보다 앞에 정렬된다.
반환값이 0일 경우, a와 b의 순서는 변경되지 않는다.
반환값이 0보다 클 경우, b가 a보다 앞에 정렬된다.
숫자를 비교할 떄 아래와 같은 compareFunction을 사용할 수 있다.
const numbers = [1, 23, 12, 5, 46];
numbers.sort(function (a, b) {
return a - b;
});
console.log(numbers); // [ 1, 5, 12, 23, 46 ]
Arrow Function을 사용하면 더 간략한 코드가 된다.
numbers.sort((a, b) => a - b);
Comment
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 10950: A+B - 3 (javascript) (0) | 2022.05.01 |
---|---|
[백준] 2739: 구구단 (javascript) (0) | 2022.05.01 |
[백준] 2525: 오븐 시계 (javascript) (0) | 2022.04.21 |
[백준] 2884: 알람 시계 (javascript) (0) | 2022.04.21 |
[백준] 14681: 사분면 고르기 (javascript) (0) | 2022.03.09 |