DFS를 이용한 할인률의 조합을 생성하고 각 할인률의 조합에 따른 결과값을 비교하는 문제입니다.
카카오톡에서는 이모티콘을 무제한으로 사용할 수 있는 이모티콘 플러스 서비스 가입자 수를 늘리려고 합니다.
이를 위해 카카오톡에서는 이모티콘 할인 행사를 하는데, 목표는 다음과 같습니다.
1번 목표가 우선이며, 2번 목표가 그 다음입니다.
이모티콘 할인 행사는 다음과 같은 방식으로 진행됩니다.
카카오톡 사용자들은 다음과 같은 기준을 따라 이모티콘을 사거나, 이모티콘 플러스 서비스에 가입합니다.
제한사항
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int number=0;
int sum=0;
void cost(vector<int> dc, vector<vector<int>> users, vector<int> emoticons) ;
//할인률의 조합
void makedc(vector<int> dc, vector<vector<int>> users, vector<int> emoticons){
if(dc.size() == emoticons.size()){
cost(dc, users, emoticons);
return;
}
for(int i=10; i<=40; i+=10) {
dc.push_back(i);
makedc(dc, users, emoticons);
dc.pop_back();
}
}
//할인률에 따른 코스트와 인원 계산
void cost(vector<int> dc, vector<vector<int>> users, vector<int> emoticons) {
vector<int> costs;
vector<int> userCost(users.size(), 0);
int maxN = 0;
int maxS = 0;
for(int i=0; i<emoticons.size(); i++) {
costs.push_back(emoticons[i] * (100- dc[i]) / 100);
}
for(int i=0; i<users.size(); i++){
for(int j=0; j<emoticons.size(); j++){
if(users[i][0] <= dc[j]){
userCost[i] += costs[j];
}
}
if(userCost[i] >= users[i][1]) {
maxN++;
}
else {
maxS += userCost[i];
}
}
if(maxN >=number) {
if(maxN == number){
if(maxS >= sum) {
number = maxN;
sum = maxS;
}
}
else{
number = maxN;
sum = maxS;
}
}
return;
}
vector<int> solution(vector<vector<int>> users, vector<int> emoticons) {
vector<int> answer;
vector<int> dc;
makedc(dc, users, emoticons);
answer.push_back(number);
answer.push_back(sum);
return answer;
}