본문 바로가기
Algorithm/프로그래머스

[프로그래머스/C++] 다단계 칫솔 판매

by code_pie 2024. 1. 7.
 
 

풀이

 

[풀이]

 

판매한 금액의 10%가 자신을 초대한 사람에게 전달 되므로 초대한 사람이 누구인지 잘 매칭만 되면 해결되는 쉬운 문제다.

 

등록된 사람이 누구의 추천을 받아서 들어왔는지를 빠르게 찾기 위해 map으로 저장해 시간을 줄이고, 판매한 금액을 정산 할 때마다, 추천을 해준 사람에게 10%씩 금액을 전달하면 된다.

 

[아이디어 요약]

 

  1. 등록되어 있는 사람을 누가 추천했는지 map으로 만든다.
  2. 판매한 사람의 금액을 정산하고 10%는 map에 있는 추천인에게 금액을 전달한다.
  3. 추천인은 금액을 전달 받으면 다시 자신을 추천한 사람에게 10%의 금액을 정산한다.
  4. 10%의 금액이 0이거나, 추천한 사람이 없으면 반복문을 종료하고 다음 금액을 정산한다. 

 

 

Code

 

 

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

vector<int> solution(vector<string> enroll, vector<string> referral, vector<string> seller, vector<int> amount) {
    map<string, int> getMoney;
    map<string, string> parrent; // key의 부모가 value
    int money, minus;
    string nowSeller;
    for (int i=0; i<enroll.size(); i++)
    {
        getMoney.insert(make_pair(enroll[i],0));
        parrent.insert(make_pair(enroll[i],referral[i]));
    }
    for (int i=0; i<seller.size(); i++)
    {
        money=amount[i]*100;
        nowSeller=seller[i];
        while(money>0)
        {
            if (nowSeller=="-")
            {
                getMoney[nowSeller]+money;
                break;                
            }
            minus=money/10;
            money-=minus;
            getMoney[nowSeller]+=money;
            money=minus;
            nowSeller=parrent[nowSeller];
        }
    }
    vector<int> answer;
    for (int i=0; i<enroll.size(); i++)
    {
        answer.push_back(getMoney[enroll[i]]);   
    }
    return answer;
}

 


 
고민할게 딱히 없는 문제였다
map을 두 번 썼는데, 사실 index로 등록해도 되는데 그냥 2개의 map을 쓰고 싶어서 2개의 map을 써서 풀었다
 

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

반응형