주사위 게임 3
https://school.programmers.co.kr/learn/courses/30/lessons/181916
📔 문제 설명
1부터 6까지 숫자가 적힌 주사위가 네 개 있습니다. 네 주사위를 굴렸을 때 나온 숫자에 따라 다음과 같은 점수를 얻습니다.
- 네 주사위에서 나온 숫자가 모두 p로 같다면 1111 × p점을 얻습니다.
- 세 주사위에서 나온 숫자가 p로 같고 나머지 다른 주사위에서 나온 숫자가 q(p ≠ q)라면 (10 × p + q)2 점을 얻습니다. 주사위가 두 개씩 같은 값이 나오고, 나온 숫자를 각각 p, q(p ≠ q)라고 한다면 (p + q) × |p - q|점을 얻습니다.
- 어느 두 주사위에서 나온 숫자가 p로 같고 나머지 두 주사위에서 나온 숫자가 각각 p와 다른 q, r(q ≠ r)이라면 q × r점을 얻습니다.
- 네 주사위에 적힌 숫자가 모두 다르다면 나온 숫자 중 가장 작은 숫자 만큼의 점수를 얻습니다.
네 주사위를 굴렸을 때 나온 숫자가 정수 매개변수 a, b, c, d로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.
💡 입출력 예
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
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function solution(a, b, c, d) {
const set = [...new Set([a, b, c, d])];
var answer = 0;
const diceCount = (setArr) => {
const count = setArr
.map((el) => [el, [a, b, c, d].filter((dice) => dice === el).length])
.sort((x, y) => y[1] - x[1]);
return {
isSame: count[0][1] === count[1][1],
dices: [count[0][0], count[1][0], count[2] && count[2][0]]
};
};
switch (set.length) {
case 1:
answer = 1111 * a;
break;
case 2:
const { isSame, dices } = diceCount(set);
answer = isSame
? (dices[0] + dices[1]) * Math.abs(dices[0] - dices[1])
: Math.pow(10 * dices[0] + dices[1], 2);
break;
case 3:
const [p, q, r] = diceCount(set).dices;
answer = q * r;
break;
case 4:
answer = Math.min(...set);
break;
}
return answer;
}
💻다른 사람 코드
내가 작성한 코드보다 깔끔하고 보기가 좋음
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function solution(a, b, c, d) {
if (a === b && a === c && a === d) return 1111 * a
if (a === b && a === c) return (10 * a + d) ** 2
if (a === b && a === d) return (10 * a + c) ** 2
if (a === c && a === d) return (10 * a + b) ** 2
if (b === c && b === d) return (10 * b + a) ** 2
if (a === b && c === d) return (a + c) * Math.abs(a - c)
if (a === c && b === d) return (a + b) * Math.abs(a - b)
if (a === d && b === c) return (a + b) * Math.abs(a - b)
if (a === b) return c * d
if (a === c) return b * d
if (a === d) return b * c
if (b === c) return a * d
if (b === d) return a * c
if (c === d) return a * b
return Math.min(a, b, c, d)
}```
This post is licensed under CC BY 4.0 by the author.