끄적끄적 코딩
article thumbnail

2023 KAKAO BLIND RECRUITMENT

이모티콘 플러스 서비스에 가장 많이 가입하게 하면서 최대한 많음 금액을 버는 문제입니다.
사용자는 할인율에 따라서 이모티콘을 반드시 구매하고 일정금액 이상 사용할 상황이면 서비스를 가입합니다.

할인율은 10%, 20%, 30%, 40%적용할 수 있으며 이모티콘의 최대 수는 7개이므로 모든 경우의 수를 계산하였습니다.
최대한 많은 사용자가 가입한 경우에서 금액이 가장큰 값을 출력해주었습니다.

let ser = 0; //정답 가입 
let mon = 0; //정답 가격
function dfs(users, emoticons, tmp, ind, val) {
    let sum; //사용자 A의 비용
    let tot = 0; //사용자들의 비용
    let con = 0; //사용자들의 가입 수
    if(ind == emoticons.length){
        for(let i=0; i<users.length; ++i){
            sum = 0;
            for(let j=0; j<tmp.length; ++j){
                if(users[i][0] <= tmp[j]){
                    sum += emoticons[j] - (emoticons[j] / 100 * tmp[j]);    
                }
            }
            if(users[i][1] <= sum){
                ++con;
            } else {
                tot += sum;
            }
        }
        if(ser < con){
            ser = con;
            mon = tot;
        } else if (ser == con){
            mon = Math.max(mon, tot)
        }
        return;
    }
    for(let i=1; i<=4; ++i){
        tmp[ind] = i * 10;
        dfs(users, emoticons, tmp, ind + 1, val + emoticons[ind] - (emoticons[ind] / 100 * tmp[ind]));        
    }
}

function solution(users, emoticons) {
    let answer = [];
    let dis = [];
    let tmp = [];
    dfs(users, emoticons, tmp, 0, 0);
    
    answer = [ser, mon];
    return answer;
}

 

 

검색 태그