문제 설명
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는 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
- 예제 1번에서 네 주사위 숫자가 모두 2로 같으므로 1111 × 2 = 2222점을 얻습니다. 따라서 2222를 return 합니다.
입출력 예 #2
- 예제 2번에서 세 주사위에서 나온 숫자가 4로 같고 나머지 다른 주사위에서 나온 숫자가 1이므로 (10 × 4 + 1)^2 = 41^2 = 1681점을 얻습니다. 따라서 1681을 return 합니다.
입출력 예 #3
- 예제 3번에서 a, d는 6으로, b, c는 3으로 각각 같으므로 (6 + 3) × |6 - 3| = 9 × 3 = 27점을 얻습니다. 따라서 27을 return 합니다.
입출력 예 #4
- 예제 4번에서 두 주사위에서 2가 나오고 나머지 다른 두 주사위에서 각각 5, 6이 나왔으므로 5 × 6 = 30점을 얻습니다. 따라서 30을 return 합니다.
입출력 예 #5
- 예제 5번에서 네 주사위 숫자가 모두 다르고 나온 숫자 중 가장 작은 숫자가 2이므로 2점을 얻습니다. 따라서 2를 return 합니다.
function solution(a, b, c, d) {
const temp = [a,b,c,d];
const dict = {}
for (let el of temp) {
if (el in dict) {
dict[el] += 1
} else {
dict[el] = 1
}
}
const keys = Object.keys(dict)
const values = Object.values(dict)
// 주사위 숫자가 네개 모두 같은 경우 -> 1개
if (values.length === 1) return 1111 * a
// 3개 같고 1개 다른 경우 -> 2개
// 2개 같고 2개 같은 경우 -> 2개
if (values.length === 2) {
if (values.indexOf(3) !== -1){
const p = Number(keys[values.indexOf(3)])
keys.splice(values.indexOf(3),1)
return (10 * p + Number(keys[0])) ** 2
} else {
return (Number(keys[0]) + Number(keys[1])) * Math.abs(Number(keys[0]) - Number(keys[1]))
}
}
// 2개 같고 1개, 1개 다른 경우 -> 3개
if (values.length === 3) {
keys.splice(values.indexOf(2),1)
return keys[0] * keys[1]
}
// 모두 다른 경우 -> 4개임
if (values.length === 4) return Math.min(...keys)
}
복잡하게 풀어서 조금 아쉬운 문제...! 아마 더 좋은 방법이 있겠지만 지금은 이렇게밖에 생각이 안난다😢
값이 같은 주사위의 개수를 알기 위해 객체 dict를 사용했다. 반복문을 통해 dict에는 주사위의 값과 같은 값을 가진 주사위의 개수가 각각 key와 value로 추가된다.
결과를 출력해야할 경우는 모두 4개이다. 주사위 4개의 값이 모두 같은 경우, 3개가 같고 1개가 다른 경우, 2개와 2개가 같은 경우, 2개와 나머지 2개의 값이 다른 경우(2 : 1 : 1), 4개 모두 다른 경우이다. if 문을과 dict의 value의 배열인 values의 개수로 각각의 경우를 분리했다.
'study > Algorithm' 카테고리의 다른 글
[프로그래머스] 정수를 나선형으로 배치하기 (0) | 2024.09.23 |
---|---|
[프로그래머스] 배열 조각하기 (0) | 2024.07.09 |
[프로그래머스] 전국 대회 선발 고사 (0) | 2024.07.04 |
[프로그래머스] 그림 확대 (0) | 2024.07.03 |
[프로그래머스] 옹알이 (1) (1) | 2024.07.02 |