할인률은 [10, 20, 30, 40] 이 네 가지만 존재한다. 완전탐색을 이용하여, 할인률의 경우의 수를 모두 구하고, 구독자수와 총액을 배열에 다 Push한다. 그 이후, 구독자수를 기준으로 내림차순으로 sort한 뒤, 구독자수가 같다면 총액을 내림차순으로 정렬한다음 첫번쨰 원소를 리턴하자.
const getPermutation = (arr, selectNum) =>{
let result = [];
if(selectNum === 1) return arr.map((d)=>[d]);
arr.forEach((data,idx,origin)=>{
let rest = origin;
let permu = getPermutation(origin, selectNum-1);
let attached = permu.map((v)=>[data, ...v]);
result.push(...attached);
})
return result;
}
function solution(users, emoticons) {
var answer = [];
let discount = [10,20,30,40];
let useLen = users.length;
let permu = getPermutation(discount, emoticons.length)
let result = [];
permu.forEach((data,idx)=>{
let val = data;
let sub = 0;
let totalPrice = 0;
let price = emoticons.slice();
users.forEach((d,i)=>{
let vals = d;
let eachPrice= 0;
for(var i =0; i<val.length; i++){
if(vals[0] <= val[i]){
eachPrice += Math.round(price[i] * ((100-val[i])/100));
}
}
if(eachPrice >= vals[1]){
sub++;
}else{
totalPrice += eachPrice
}
})
result.push([sub, totalPrice]);
})
result.sort((a,b)=>{
if(a[0] === b[0]){
return b[1] > a[1] ? 1 : -1
}else{
return b[0] > a[0] ? 1 : -1
}
})
return result[0]
}
처음에는 분명 규칙이 있을 거라고 생각했지만, 계속 고민할 수록 규칙이 존재할수없다고 느껴서 완전탐색을 하기로 하였다. 결과적으로 완전탐색으로 풀어야 해결되는 문제였다.