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

프로그래머스 다단계 칫솔 판매

by 콩순이냉장고 2021. 7. 7.

문제 URL : https://programmers.co.kr/learn/courses/30/lessons/77486

 

코딩테스트 연습 - 다단계 칫솔 판매

민호는 다단계 조직을 이용하여 칫솔을 판매하고 있습니다. 판매원이 칫솔을 판매하면 그 이익이 피라미드 조직을 타고 조금씩 분배되는 형태의 판매망입니다. 어느정도 판매가 이루어진 후,

programmers.co.kr

 

문제 접근법 :

그림화살표 엉성해서 죄송합니다.

루트로 올라가는 단방향 트리라고 생각하시면 쉽습니다. 해당지점에서 올라가서 루트까지 올라가면서 그가격의 10프로씩 줄여나가는 겁니다 가격이 0이면 더이상 올라갈 필요없고 루트라면 빠져나오면 되기때문에 어렵지 않은문제입니다.

 

소스코드 :

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
//By 콩순이냉장고
#include<bits/stdc++.h>
using namespace std;
unordered_map<stringstring> tree;
unordered_map<stringint> member;
void dfs(string& name,int price) {
    int nextprice = price / 10;
    member[name] += price - nextprice;
    if (name == "-"||nextprice==0) {
        return;
    }
    dfs(tree[name], nextprice);
}
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++) {
        tree[enroll[i]] = referral[i];
    }
    for (int i = 0; i < seller.size(); i++) {
        dfs(seller[i], amount[i] * 100);
    }
    for (int i = 0; i < enroll.size(); i++)
        answer.push_back(member[enroll[i]]);
    return answer;
}
cs

 

궁금한점 혹은 모르는점 혹은 논리적인 오류등 어떤 질문이든 댓글은 언제나 환영입니다.