관리 메뉴

fatalite

프로그래머스 이모티콘 할인행사 본문

코딩 인터뷰/C++

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

fataliteforu 2024. 10. 13. 11:47

순열 구현 방법 순간 헷갈려서 애먹은

그래도 천천히 생각하니깐 됐다

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include <utility>
using namespace std;

vector<vector<int>> dupPermutations;

pair<int, int> Simulate(
    vector<vector<int>> users,
    vector<int> emoticons,
    vector<int> discountPercents)
{
    int emoticonPlus = 0;
    int emoticonMoney = 0;
    
    for(vector<int> user : users)
    {
        int userSum = 0;
        
        for(int j = 0; j < emoticons.size(); j++)
        {
            if(user[0] <= discountPercents[j])
            {
                userSum += (double)(emoticons[j] * (1 - (double)discountPercents[j] / 100));
            }
        }
        
        if(userSum >= user[1])
        {
            emoticonPlus += 1;
        }
        else 
        {
            emoticonMoney += userSum;
        }
    }
    
    return {emoticonPlus, emoticonMoney };
    
}
bool Compare(pair<int, int> p1, pair<int, int> p2)
    {
        if(p1.first == p2.first)
        {
            return p1.second > p2.second;
        }
        else
        {
            return p1.first > p2.first;
        }
        
    }

void DupPermutation(vector<int>& current, vector<int>& emoticons)
{
    if(current.size() == emoticons.size())
    {
        dupPermutations.push_back(current);
        return;
    }
    
    for(int i = 1 ; i <= 4; i++)
    {
        vector<int> next = current;
        next.push_back(i * 10);
        DupPermutation(next, emoticons);
    }
    
}

vector<int> solution(vector<vector<int>> users, vector<int> emoticons) {
    
    vector<pair<int,int>> simulationResults;
    
    vector<int> tmp;
    DupPermutation(tmp, emoticons);
    
    for(vector<int> v : dupPermutations)
    {
        pair<int, int> p = Simulate(users, emoticons, v);
        simulationResults.push_back(p);
    }
    
    sort(simulationResults.begin(), simulationResults.end(), Compare);
    return {simulationResults[0].first, simulationResults[0].second };
}