본문 바로가기
PS(Javascript)

[프로그래머스] lv2 이모티콘 할인 행사

by 같이긍뱅와 2023. 2. 14.
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을 갱신해준다.

댓글