function solution(users, emoticons) {
const ul = users.length;
const el = emoticons.length;
const dRate = [];
let maxE = 0, ansM = 0;
const calc = () => {
let e = 0, m = 0;
users.forEach(user => {
let tmp = 0;
for(let i = 0; i < el; i++) {
if(dRate[i] >= user[0]) {
tmp += emoticons[i] * (100 - dRate[i]) / 100;
}
if(tmp >= user[1]) {
e++;
tmp = 0;
break;
}
}
m += tmp;
})
if(e > maxE || (e === maxE && m > ansM)) {
maxE = e;
ansM = m;
}
}
const DFS = () => {
if(el === dRate.length) {
calc();
return;
}
for(let i = 10; i <= 40; i+=10) {
dRate.push(i);
DFS()
dRate.pop();
}
}
DFS();
return [maxE, ansM];
}
DFS를 활용한 순열을 이용하여 풀었다. 이모티콘의 할인율은 이모티콘마다 다르게 적용할 수 있는데 이 경우를 모두 따져야하기 때문에 조합이 아닌 순열이다.
이모티콘 플러스를 많이 파는것이 1순위 목표이기 때문에 판매액이 적더라도 이모티콘 플러스을 많이 팔았다면 maxE와 함께 ansM도 갱신해주고 이모티콘 플러스가 같을 경우 m이 더 큰 경우만 ansM을 갱신해준다.
'PS(Javascript)' 카테고리의 다른 글
[프로그래머스] lv3 최고의 집합 (0) | 2023.03.05 |
---|---|
[프로그래머스] lv3 셔틀버스 (0) | 2023.02.21 |
[프로그래머스] lv2 양궁대회 (0) | 2023.02.12 |
[프로그래머스] lv2 파일명 정렬 (0) | 2023.01.28 |
[프로그래머스] lv2 n진수 게임 (0) | 2023.01.26 |
댓글