풀이
[풀이]
판매한 금액의 10%가 자신을 초대한 사람에게 전달 되므로 초대한 사람이 누구인지 잘 매칭만 되면 해결되는 쉬운 문제다.
등록된 사람이 누구의 추천을 받아서 들어왔는지를 빠르게 찾기 위해 map으로 저장해 시간을 줄이고, 판매한 금액을 정산 할 때마다, 추천을 해준 사람에게 10%씩 금액을 전달하면 된다.
[아이디어 요약]
- 등록되어 있는 사람을 누가 추천했는지 map으로 만든다.
- 판매한 사람의 금액을 정산하고 10%는 map에 있는 추천인에게 금액을 전달한다.
- 추천인은 금액을 전달 받으면 다시 자신을 추천한 사람에게 10%의 금액을 정산한다.
- 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을 써서 풀었다
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스/C++] 최적의 행렬 곱셈 (0) | 2024.01.07 |
---|---|
[프로그래머스/C++] 퍼즐 조각 채우기 (0) | 2024.01.07 |
[프로그래머스/C++] 불량 사용자 (0) | 2024.01.06 |
[프로그래머스/C++] 최고의 집합 (0) | 2024.01.06 |
[프로그래머스/C++] 4단 고음 (0) | 2024.01.06 |