[프로그래머스] 다단계 칫솔 판매
📖 문제
✏️ 나의 풀이
const answer = {};
const group = {};
for(let i = 0; i<enroll.length; i++){
group[enroll[i]] = referral[i];
answer[enroll[i]] = 0;
}
answer는 정답을 담은 객체로 이 후 배열로 바꿔 제출해준다.
group은 추천인과 추천받은 사람을 담은 객체로 key는 추천받은 사람, value는 추천한 사람이다.
const dfs = (name, amount) =>{
if(name === '-') return;
const part = Math.floor(amount * 0.1);
answer[name] += amount - part;
if(part) dfs(group[name], part);
}
dfs의 매개변수로 name과 amount를 받는다.
name은 판매한 사람, amount는 판매금이다.
만일 name이 -
일 경우 추천해준 사람이 없으므로 바로 return
한다.
part는 판매금의 10프로로 판매한사람은 전체 판매금의 part를 뺀 값을 answer에 저장한다.
이후 10프로는 추천인이 가지게 되므로 dfs함수를 재귀함수로 실행시켜 name에 추천인, amount는 10프로 금액이다.
만일 part가 1미만일 경우 더이상 배당금이 없는것이므로 더이상 재귀함수를 실행시키지 않는다.
👩💻 코드
function solution(enroll, referral, seller, amount) {
const answer = {};
const group = {};
for(let i = 0; i<enroll.length; i++){
group[enroll[i]] = referral[i];
answer[enroll[i]] = 0;
}
const dfs = (name, amount) =>{
if(name === '-') return;
const part = Math.floor(amount * 0.1);
answer[name] += amount - part;
if(part) dfs(group[name], part);
}
for(let i = 0; i<seller.length; i++){
dfs(seller[i], amount[i] * 100)
}
return Object.values(answer);
}
댓글남기기