C++:: 프로그래머스 < 이모티콘 할인행사 >

jahlee·2023년 3월 15일
0

프로그래머스_Lv.2

목록 보기
10/106
post-thumbnail

문제를 읽었을 때 dfs로 접근하여 이모티콘들에 대해 순차적으로 할인되어진 값을 정리하여 문제 조건에 만족하는 사람들을 구하는 방법이 좋을 것 같아서 다음과 같이 문제를 풀었다. dfs함수 안에서 각 이모티콘에 대한 할인율과 할인된 가격을 price 백터 안에 정리하고 이모티콘의 개수만큼 정리하면 기존 결과값과 비교하여 문제조건에 맞는 결과를 도출해 나아가는 방식이다.

#include <string>
#include <vector>
using namespace std;

int dis[4] = {40,30,20,10};//할인율
vector<pair<int,int>> price(7,{0,0});//할인된 가격, 할인율
vector<int> answer(2,0);

void    dfs(int cnt, int n, vector<vector<int>> users, vector<int> emoticons)
{
    if(cnt == n)// 이모티콘에 대한 할인가격 할인율을 다 기입했을 때
    {
        int plus = 0, sum = 0;
        for(int i=0;i<users.size();i++)
        {
            int tmp = 0;
            for(int j=0;j<n;j++)
                if (users[i][0] <= price[j].second) tmp += price[j].first;//원하는 할인율이상이면 구매값++
            if(tmp >= users[i][1]) plus++;//구매값이 정해진 값 이상이면
            else sum += tmp;//이윤++
        }
        if (plus > answer[0])//가입자수가 더 많으면 
        {
            answer[0] = plus;
            answer[1] = sum;
        }
        else if(plus == answer[0] && sum >= answer[1]) answer[1] = sum;// 가입자수가 같고 이윤이 크면
        return ;
    }
    for(int i=0;i<4;i++)
    {
        price[cnt].first = (100 - dis[i]) * emoticons[cnt] / 100;//할인된 가격
        price[cnt].second = dis[i];//할인율
        dfs(cnt+1, n, users, emoticons);
    }
}

vector<int> solution(vector<vector<int>> users, vector<int> emoticons)
{
    dfs(0, emoticons.size(), users, emoticons);
    return answer;
}

0개의 댓글