candidates
)로 push해준다.candidates
배열을 1차적으로 이모티콘플러스 구독자 수 기준으로 내림차순 정렬하고, 2차적으로 총 판매수익을 기준으로 내림차순 정렬한다. 그렇게 했을 때 첫 번째 원소를 리턴하면 된다.function solution(users, emoticons) {
const candidates = [];
const percentage = [10, 20, 30, 40];
const salePermutation = [];
getSalePermutation(0, []);
function getSalePermutation(emoIdx, tempPerm) {
if(emoIdx == emoticons.length) {
salePermutation.push(tempPerm);
return;
}
for(let i=0; i<4; i++) {
getSalePermutation(emoIdx+1, tempPerm.concat(percentage[i]));
}
}
salePermutation.forEach(perm => {
let priceSum = 0, subscriber = 0;
users.forEach(user => {
let toBuy = [];
perm.forEach((p, i) => {if(p >= user[0]) toBuy.push(i)});
let userSum = 0;
toBuy.forEach(b => userSum += emoticons[b] * (1 - perm[b] / 100));
if(userSum >= user[1]) subscriber++;
else priceSum += userSum;
});
candidates.push([subscriber, priceSum]);
});
candidates.sort((a, b) => b[0] == a[0] ? b[1] - a[1] : b[0] - a[0])
return candidates[0];
}
DFS로 순열을 만드니 코드 길이도 그렇고 생각보다 어렵지 않았던 건데 겁을 먹었다. 다음에 순열을 구할 일이 있다면 차근차근 DFS를 설계해보자.