// 이모티콘과 할인률 모든 조합 구하기
const getPermutation=(salesArray, emoticonNumber)=>{
let result=[];
// 이모티콘 개수가 하나라면 그대로 리턴하면 된다.
if (emoticonNumber===1){
return salesArray.map(el=>[el])
}
salesArray.forEach((v, index, salesArray)=>{
const fixed=v;
const rest=salesArray;
const permutation=getPermutation(rest, emoticonNumber-1);
const combineFix=permutation.map(v=>[fixed, ...v])
result.push(...combineFix)
})
return result
}
function solution(users, emoticons) {
// 할인율 : 10%, 20%, 30%, 40%
const salesArray=[10, 20, 30, 40];
// 이모티콘 할인율 조합
let permutationResults=getPermutation(salesArray, emoticons.length);
// [[이모티콘 가입 여부,판매액]]
// 배열에 욱여넣고 나중에 최대값 찾을 생각 하지 말고 미리 계산하자
let max=[0,0]
for (let i=0;i<permutationResults.length;i++){
let emoticonPlus=0;
let salesIncome=0;
for (let j=0;j<users.length;j++){
let total=0;
let [percent, limit]=users[j]
for (let t=0;t<permutationResults[i].length;t++){
if (percent<=permutationResults[i][t]){
total+=emoticons[t]*(100-permutationResults[i][t])/100
}
}
if (total>=limit){
emoticonPlus+=1;
}else{
salesIncome+=total;
}
}
if (emoticonPlus>max[0]||(emoticonPlus===max[0]&&salesIncome>max[1])){
max=[emoticonPlus,salesIncome];
}
}
return max;
}
이게 dfs로도 풀리는구나...