알고리즘/문제 풀이
[프로그래머스] 다단계 칫솔 판매 (2021 Dev-Matching)
degurii
2021. 5. 2. 21:27
728x90
문제 링크
programmers.co.kr/learn/courses/30/lessons/77486
코딩테스트 연습 - 다단계 칫솔 판매
민호는 다단계 조직을 이용하여 칫솔을 판매하고 있습니다. 판매원이 칫솔을 판매하면 그 이익이 피라미드 조직을 타고 조금씩 분배되는 형태의 판매망입니다. 어느정도 판매가 이루어진 후,
programmers.co.kr
풀이
칫솔을 팔아서 한 번에 얻을 수 있는 이익이 최대 10,000원이고, 10%씩 부모에게 상납해야 하므로 최대 5세대 위의 부모까지만 상납하면 됩니다.
1) 각 사람의 부모를 저장해줍니다.
2) 사람과 이익금이 주어졌을 때 부모에게 10%씩 상납하는 함수를 만듭니다.
3) 각 칫솔 판매마다 재귀적으로 돌려줍시다.
ES2015 이후로 객체 프로퍼티의 키가 string, 혹은 symbol일 때 삽입한 순서대로 접근할 수 있음을 보장합니다.
result 객체의 프로퍼티를 enroll 배열의 순서대로 추가했기 때문에, result의 밸류들을 배열로 만들어 바로 리턴해주면 됩니다.
정답 코드
function solution(enroll, referral, seller, amount) {
const parent = enroll.reduce((par, name, i) => {
par[name] = referral[i];
return par;
}, {})
const result = enroll.reduce((res, name) => {
res[name] = 0;
return res;
}, {});
const go = function(name, benefit){
if(name === '-' || benefit === 0) return;
const up = parseInt(benefit / 10, 10);
result[name] += benefit - up;
go(parent[name], up);
}
seller.forEach((name, i) => {
go(name, amount[i] * 100);
})
return Object.values(result);
}
728x90