Algorithm/Programmers
[Algorithm] Programmers :: 다단계 칫솔 판매
MaxLevel
2022. 10. 8. 18:05
https://school.programmers.co.kr/learn/courses/30/lessons/77486
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
map<string, pair<string, int>> parentMap;
void recur(string me, int money)
{
int parentMoney = money / 10;
int myMoney = money - parentMoney;
string parent = parentMap[me].first;
parentMap[me].second += myMoney;
if (parent != "no" && parentMoney != 0)
{
recur(parent, parentMoney);
}
}
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++)
{
if (referral[i] != "-")
{
parentMap[enroll[i]] = make_pair(referral[i], 0);
}
else
{
parentMap[enroll[i]] = make_pair("no", 0);
}
}
for (int i = 0; i < seller.size(); i++)
{
recur(seller[i], amount[i] * 100);
}
for (int i = 0; i < enroll.size(); i++)
{
answer.push_back(parentMap[enroll[i]].second);
}
return answer;
}
|
cs |
map만 적절히 활용할 줄 알면 풀 수 있는 구현문제.
부모가 가질 이익금이 0원이라면 재귀를 돌릴필요가 없다.
불필요한 재귀를 방지해야 타임아웃에 안걸린다.
recur함수의 'parentMoney != 0'의 조건을 빼버리면 타임아웃에 걸린다.