1부터 6까지 숫자가 적힌 주사위가 네 개 있습니다. 네 주사위를 굴렸을 때 나온 숫자에 따라 다음과 같은 점수를 얻습니다.
네 주사위를 굴렸을 때 나온 숫자가 정수 매개변수 a, b, c, d로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.
function solution(a, b, c, d) {
var answer = 0;
const arr = [...new Set([a,b,c,d])];
const num = (a+b+c+d)- arr.reduce((acc,curr)=> acc+curr)
if(arr.length === 1) answer = 1111*a;
else if(arr.length === 4) answer = Math.min(...arr);
else if(arr.length === 2){
if([a,b,c,d].filter(v => v===arr[0]).length === 2) answer = (arr[0] + arr[1]) * Math.abs(arr[0]-arr[1]);
else if([a,b,c,d].filter((v) => v === arr[0]).length > 1) answer = Math.pow((10*arr[0]+arr[1]),2);
else answer = Math.pow((10*arr[1]+arr[0]),2)
}
else answer = arr.filter(v => v !== num).reduce((acc,curr)=> acc* curr);
return answer;
}
function count(arr) {
const counter = new Map();
for (const num of arr) {
counter.set(num, (counter.get(num) || 0) + 1);
}
const sortedByCnt = [...counter.keys()].sort((a, b) => counter.get(b) - counter.get(a));
const maxCnt = Math.max(...counter.values());
return [sortedByCnt, maxCnt];
}
function solution(a, b, c, d) {
const [arr, maxCnt] = count([a, b, c, d]);
const [p, q, r, s] = arr;
if (arr.length === 1) {
return p * 1111;
}
if (arr.length === 2) {
return maxCnt === 2 ? (p + q) * Math.abs(p - q) : (10 * p + q) ** 2;
}
if (arr.length === 3) {
return q * r;
}
return Math.min(p, q, r, s);
}