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
var answer = 0;
let result = {};
[a,b,c,d].forEach((x) => { result[x] = (result[x] || 0)+1; }); //중복수 객체로 정리 (오름차순)
let k = Object.keys(result); // key배열 (오름차순)
let v = Object.values(result); // value배열 (key순)
// key 값은 */가 바로 붙는거 아니면 parseInt나 Number 붙여주기
switch (String(Math.max(...v))) {
case '4' : answer = 1111*a;
break;
case '3' : answer = (v[0]===3 ? k[0]*10+Number(k[1]) : k[1]*10+Number(k[0]))**2;
break;
case '2' :
if(v[0]===2) answer = k[1]*k[2];
if(v[1]===2) answer = k[0]*k[2];
if(v[2]===2) answer = k[0]*k[1];
if(!v[2]) answer = (Number(k[0])+Number(k[1]))*Math.abs(Number(k[0])-Number(k[1]));
break;
case '1' : answer = Number(k[0]);
break;
default : answer = 0;
}
return answer;
중복 수 구하기, 겹치는 수 제외하기 공부, 객체->배열
다른풀이
const map = new Map();
for (const data of [a, b, c, d]) {
map.set(data, (map.get(data) || 0) + 1)
};
const sortedArr = [...map].sort((a, b) => {if (a[1] === b[1]) return b[0] - a[0]; else return b[1] - a[1]});
if (map.size === 1) return 1111 * sortedArr[0][0];
else if (map.size === 3) return sortedArr[1][0] * sortedArr[2][0];
else if (map.size === 4) return sortedArr[3][0];
else if (sortedArr[0][1] === 3) return (10 * sortedArr[0][0] + sortedArr[1][0]) ** 2;
else return (sortedArr[0][0] + sortedArr[1][0]) * (sortedArr[0][0] - sortedArr[1][0]);
function solution(a, b, c, d) {
const res = [a, b, c, d]
.map(e => [[a, b, c, d].filter(el => e === el).length, e])
.sort((a, b) => a[0] !== b[0] ? b[0] - a[0] : b[1] - a[1])
const sort = res.map(e => e[0])
const arr = res.map(e => e[1])
return ([
arr[3],
(arr[0] + arr[2]) * (arr[0] - arr[2]),
Number(String(arr[0]) + String(arr[3])) ** 2,
Number(arr.join('')),
arr[2] * arr[3]
][sort[0] - 1 === 1 ? sort[2] === 1 ? 4 : 1 : sort[0] - 1])
}