어흥
[프로그래머스] 다단계 칫솔 판대 (C++) 본문
728x90
반응형
문제 링크: programmers.co.kr/learn/courses/30/lessons/77486
1. 주의할 점
- Map을 통해 String과 Int를 연관시킨다
- 조건에 알맞게 구현한다
2. 구현
- Map m에 사람과 번호를 매칭시킨다
- Map을 통해 각 사람을 등록시킨 사람 Par을 설정한다
- Seller 벡터를 통해 판매원이 전달된 수익을 Money에 할당하고, Cur을 통해 현재 사람을 가리킨다. Cur이 0보다 클때까지 While문을 수행한다(Center 전까지)
- Money가 10원보다 작으면 현재 haveMoney[Cur]에 돈을 다 할당하고 종료하고 10원보다 크다면 90%를 현재 haveMoney[Cur]에 저장하고 상위 사람에게 향하고 남은 금액을 가지도록 Cur과 Money를 갱신한다
#include <string>
#include <vector>
#include <map>
#include <iostream>
using namespace std;
map<string,int> m;
int par[10001];
int haveMoney[10001];
vector<int> solution(vector<string> enroll, vector<string> referral, vector<string> seller, vector<int> amount) {
vector<int> answer;
for(int i=0;i<enroll.size();i++){
string str = enroll[i];
m[str]=i+1;
}
for(int i=0;i<enroll.size();i++){
int c = m[enroll[i]];
int p;
string s = referral[i];
if(s=="-") p=0;
else p = m[referral[i]];
par[c]=p;
}
for(int i=0;i<seller.size();i++){
int money = amount[i]*100;
int cur = m[seller[i]];
while(cur>0){
int p = par[cur];
if(money<10){
haveMoney[cur]+=money;
break;
}
int tenPer = money/10;
haveMoney[cur]+=(money-tenPer);
money=tenPer;
cur = p;
}
}
for(int i=0;i<enroll.size();i++){
string str = enroll[i];
answer.push_back(haveMoney[m[str]]);
}
return answer;
}
728x90
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 순위 (C++) (0) | 2021.05.06 |
---|---|
[프로그래머스] 가장 먼 노드 (C++) (0) | 2021.05.04 |
[프로그래머스] 행렬 테두리 회전하기 (C++) (0) | 2021.05.03 |
[프로그래머스] 로또의 최고 순위와 최저 순위 (C++) (0) | 2021.05.03 |
[프로그래머스] 경주로 건설 (C++) (0) | 2021.04.30 |
Comments