
1부터 6까지 숫자가 적힌 주사위가 네 개 있습니다. 네 주사위를 굴렸을 때 나온 숫자에 따라 다음과 같은 점수를 얻습니다.
네 주사위를 굴렸을 때 나온 숫자가 정수 매개변수 a, b, c, d로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.
a, b, c, d는 1 이상 6 이하의 정수입니다.| a | b | c | d | result |
|---|---|---|---|---|
| 2 | 2 | 2 | 2 | 2222 |
| 4 | 1 | 4 | 4 | 1681 |
| 6 | 3 | 3 | 6 | 27 |
| 2 | 5 | 2 | 6 | 30 |
| 6 | 4 | 2 | 5 | 2 |
입출력 예 #1
입출력 예 #2
입출력 예 #3
a, d는 6으로, b, c는 3으로 각각 같으므로 (6 + 3) × |6 - 3| = 9 × 3 = 27점을 얻습니다. 따라서 27을 return 합니다.입출력 예 #4
입출력 예 #5
function solution(a, b, c, d) {
const dice = [a, b, c, d];
const counts = {};
// 각 숫자의 빈도를 계산
for (const num of dice) {
counts[num] = (counts[num] || 0) + 1;
}
const uniqueNumbers = Object.keys(counts).map(Number);
const frequencies = Object.values(counts);
// 케이스별 점수 계산
switch (frequencies.length) {
case 1:
// 네 주사위 숫자가 모두 같은 경우
return 1111 * uniqueNumbers[0];
case 2:
if (frequencies.includes(3)) {
// 세 주사위 숫자가 같고 나머지 하나가 다른 경우
const p = uniqueNumbers.find((num) => counts[num] === 3);
const q = uniqueNumbers.find((num) => counts[num] === 1);
return (10 * p + q) ** 2;
} else {
// 두 쌍의 주사위가 같은 경우
const [p, q] = uniqueNumbers;
return (p + q) * Math.abs(p - q);
}
case 3:
// 한 쌍의 주사위가 같고 나머지 두 숫자가 다른 경우
const [q, r] = uniqueNumbers.filter((num) => counts[num] === 1);
return q * r;
case 4:
// 네 주사위 숫자가 모두 다른 경우
return Math.min(...uniqueNumbers);
}
}
const counts = {};
for (const num of dice) {
counts[num] = (counts[num] || 0) + 1;
}
counts 객체에 저장합니다.dice 배열을 순회하며 숫자의 빈도를 기록합니다.counts[num]이 존재하면 1씩 증가하고, 없으면 1로 초기화합니다.dice = [4, 4, 6, 6]counts = { 4: 2, 6: 2 }.const uniqueNumbers = Object.keys(counts).map(Number);
const frequencies = Object.values(counts);
Object.keys(counts)를 사용해 나온 숫자를 추출합니다.map(Number)로 문자열을 숫자로 변환하여 배열로 저장합니다.Object.values(counts)를 통해 각 숫자가 나온 빈도를 배열로 저장합니다.counts = { 4: 3, 1: 1 }uniqueNumbers = [4, 1], frequencies = [3, 1].각 케이스는 frequencies.length 값(고유 숫자의 개수)에 따라 분기됩니다.
case 1:
return 1111 * uniqueNumbers[0];
frequencies.length === 1 → 모든 숫자가 동일.dice = [2, 2, 2, 2] → frequencies = [4].1111 * 고유 숫자.1111 * 2 = 2222.if (frequencies.includes(3)) {
const p = uniqueNumbers.find((num) => counts[num] === 3);
const q = uniqueNumbers.find((num) => counts[num] === 1);
return (10 * p + q) ** 2;
}
frequencies.includes(3) → 빈도 배열에 3이 포함되어 있으면 세 숫자가 같음.dice = [4, 4, 4, 1] → frequencies = [3, 1].(10 * p + q) ** 2.p: 세 번 나온 숫자.q: 한 번 나온 숫자.(10 * 4 + 1) ** 2 = 1681.const [p, q] = uniqueNumbers;
return (p + q) * Math.abs(p - q);
frequencies.length === 2이고, 각 빈도가 2.dice = [6, 6, 3, 3] → frequencies = [2, 2].(p + q) * Math.abs(p - q).p, q: 두 쌍의 숫자.(6 + 3) * |6 - 3| = 27.const [q, r] = uniqueNumbers.filter((num) => counts[num] === 1);
return q * r;
frequencies.length === 3이고, 빈도가 1인 숫자가 두 개.dice = [2, 2, 5, 6] → frequencies = [2, 1, 1].q * r.q, r: 각각 빈도가 1인 숫자.5 * 6 = 30.return Math.min(...uniqueNumbers);
frequencies.length === 4 → 모든 숫자가 다름.dice = [6, 4, 2, 5] → frequencies = [1, 1, 1, 1].Math.min(6, 4, 2, 5) = 2.counts를 이용해 숫자의 빈도 계산:uniqueNumbers와 frequencies를 통해 고유 숫자 개수와 각 숫자의 빈도를 판단합니다.frequencies.length 값에 따라 케이스를 분기합니다.