일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 스택
- 독일어독학
- 구현
- 카카오인턴
- SQLD
- 세브란스
- 롯데정보통신
- 부주상골
- 백준
- 코테
- 프로그래머스
- dp
- 코딩테스트
- 독일어
- 분할정복
- DFS
- 부주상골증후군
- SWIFT
- sql
- 부주상골수술
- 카카오인턴십
- istringstream
- IOS
- 독학
- ChatGPT
- BFS
- 부주상골수술후기
- 리눅스
- c++
- 카카오코테
Archives
- Today
- Total
슈뢰딩거의 고등어
[프로그래머스] 2021 Dev-Matching: 웹 백엔드 개발자(상반기) > 다단계 칫솔 본문
https://programmers.co.kr/learn/courses/30/lessons/77486
코딩테스트 연습 - 다단계 칫솔 판매
민호는 다단계 조직을 이용하여 칫솔을 판매하고 있습니다. 판매원이 칫솔을 판매하면 그 이익이 피라미드 조직을 타고 조금씩 분배되는 형태의 판매망입니다. 어느정도 판매가 이루어진 후,
programmers.co.kr
...중략
문제가 긴것에 비해 쉽게 풀이가 가능한 문제이다.
단순하게 위에 부모노드가 있으면 10%을 주면 된다. 그리고 그 부모노드로 이동해서 계속 반복하면 된다.
그렇게 하기 위해서는 부모노드와 구한 값을 저장할 수 있는 방법이 있어야 한다!
[풀이방법]
1. 현재노드의 부모를 저장한다.
2. seller 들의 판매내역인 amount*100 을 기반으로 비용을 계산하기 시작한다.
- seller 노드에서 시작하여 root 노드까지 가야하기때문에 재귀를 사용했다.
2-1. 현재 노드가 root 일 경우, 종료한다.
2-2. amount의 10%인 deliver를 부모노드에게 전달해야하므로 amount에 deliver을 뺀 값을 현재 노드의 cost에 더한다.
(a) deliver 이 0 일 경우, 더 이상 부모노드에게 전달할 필요 없으므로 재귀를 중단한다.
(b) 0 이 아닐 경우, 다음 부모노드에게 10% 상납이 가능하므로, (부모노드, deliver)을 파라미터로 재귀함수를 호출한다.
#include <string>
#include <vector>
#include <map>
using namespace std;
map <string, string> parent;
map <string, int> cost;
void update_gain(string member, int sell_cost) {
if(member == "-") return;
int delivery = sell_cost * 0.1;
cost[member] += sell_cost - delivery;
if(delivery == 0) return;
update_gain(parent[member], delivery);
}
vector<int> solution(vector<string> enroll, vector<string> referral, vector<string> seller, vector<int> amount) {
vector<int> answer;
// 1. 부모 저장
for(int i=0; i<enroll.size(); i++) {
parent[enroll[i]] = referral[i];
}
// 2. 값 계산
for(int i=0; i<seller.size(); i++)
update_gain(seller[i], amount[i]*100);
// 3. 결과 리턴
for(int i=0; i<enroll.size(); i++) {
answer.push_back(cost[enroll[i]]);
}
return answer;
}
'알고리즘' 카테고리의 다른 글
[프로그래머스] n^2 배열 자르기 (0) | 2022.07.02 |
---|---|
[프로그래머스 ]동적계획법(Dynamic Programming) > 등굣길 (0) | 2022.05.22 |
[프로그래머스] 힙(Heap) > 디스크 컨트롤러 (0) | 2022.05.13 |
[프로그래머스] 힙(Heap) > 이중우선순위큐 (0) | 2022.05.12 |
[프로그래머스] 가장 긴 팰린드롬 (0) | 2022.05.12 |
Comments