주사위게임 3
다음과 같은 조건에 따라 적절한 값을 리턴.
-네 주사위에서 나온 숫자가 모두 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 | 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 |
나의 풀이:
function solution(a, b, c, d) {
var dice = [a, b, c, d].sort((a,b)=> a-b)
var [a,b,c,d] = dice
const filtered = [...new Set(dice)] // 중복값 제거
if(filtered.length === 1) { // 네 값이 같음
return 1111 * a
}else if(filtered.length == 4) { // 네 값이 다름
return a
}else if(filtered.length === 2 && b!==c ) { // 두 값씩 같음
return (b+c)*Math.abs(b-c)
}else if(filtered.length === 2 && b==c) { // 세 값 같고 하나 다름
if(a!==b) {
return (10*b+a)**2
}else{
return (10*c+d)**2
}
}else{ // 두 값이 같고 두 값은 서로 다름
if(a==b) {
return c*d
}else if(b==c) {
return a*d
}else{
return a*b
}
}
}
sort 메서드를 이용해서 정리된 값인 dice, Set 을 이용해서 중복값을 제거한 filtered 를 활용하여 문제를 풀었다. 객체로 풀수 있을 것 같아서 값을 객체로 바꾸는 것 까지 했지만, 그 이후가 도저히 생각이 나지 않음. 다른 풀이를 보니 객체로 푼 문제가 있었다.
다른 풀이:
function solution(a, b, c, d) {
const nums = [a, b, c, d];
const obj = {};
for(let i = 0; i < 4; i++) {
if(obj[nums[i]]) {
obj[nums[i]] += 1;
} else {
obj[nums[i]] = 1;
}
}
const arr = Object.entries(obj).sort((a, b) => b[1] - a[1]);
// 첫번째 조건
if(arr.length === 1) {
return 1111 * +arr[0][0]
}
if(arr.length === 2) {
// 두번째 조건
if(arr[0][1] === 3) {
return (10 * +arr[0][0] + +arr[1][0]) ** 2
}
// 세번째 조건
return (+arr[0][0] + +arr[1][0]) * Math.abs(+arr[0][0] - +arr[1][0])
}
// 네번째 조건
if(arr.length === 3) {
return +arr[1][0] * +arr[2][0]
}
return +(arr.sort((a, b) => +a[0] - +b[0])[0][0]);
}
entries 메소드를 활용하여 값을 빈도 수가 큰 순서부터 정렬한 다음, 조건을 나열해 주는 방식으로 풀 수 있다.
'프로그래머스' 카테고리의 다른 글
[코딩기초트레이닝] 머쓱이 스탬프 획득 (0) | 2023.07.12 |
---|---|
[알고리즘] 배열 만들기3 (0) | 2023.05.19 |
[알고리즘] l로 만들기 (0) | 2023.05.06 |
[알고리즘] 최빈값 구하기 / 객체 (0) | 2023.05.04 |
[알고리즘] 간단한 식 계산하기 / eval() (0) | 2023.04.28 |