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;
}
'알고리즘' 카테고리의 다른 글
[Java] 백준 18111번 마인크래프트 (0) | 2023.01.19 |
---|---|
[Java] 백준 3085번 사탕 게임 (2) | 2023.01.18 |
[Java] 백준 14503번 로봇 청소기 (0) | 2023.01.17 |
[Java] 백준 14888번 연산자 끼워넣기 (0) | 2023.01.17 |
[Java] SWEA - View (0) | 2023.01.16 |