새소식

Programmers

[Programmers] 다단계 칫솔 판매 문제 - (javascript)

  • -
728x90
문제 이름 :  다단계 칫솔 판매

 

<<< 문제 내용 >>>

문제 내용이 길어 링크로 첨부합니다.

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

 

function solution(enroll, referral, seller, amount) { let graph = Array.from(Array(enroll.length), () => Array()); let money = Array.from(Array(enroll.length), () => Array()); // 저는 bfs 형식을 사용했지만 단방향 상승밖에 없기 때문에 // dfs를 사용하여도 전혀 상관 없습니다. const upToCenter = (name, amount) => { const startIdx = enroll.indexOf(name); let queue = [[startIdx, amount]]; while (queue.length) { let [next, amount] = queue.shift(); const tempMoney = Math.floor(amount * 0.1); money[next] = Number(money[next]) + amount - tempMoney; /* 중요한건 백트래킹처럼 가지치기를 해야합니다. 상승하다보면 0원만 주게되는 경우가 생길땐 탐색을 종료하도록 해야 시간초과가 나지 않습니다. */ if (tempMoney === 0) break; if (graph[next].length) { queue.push([graph[next][0], tempMoney]); } } }; referral.forEach((el, idx) => { const temp = enroll.indexOf(el); if (temp >= 0) graph[idx].push(temp); }); seller.forEach((el, idx) => { upToCenter(el, amount[idx] * 100); }); return money.map((el) => (el.length !== undefined ? 0 : el)); }

 

 

도움이 되셨다면 공감 부탁드립니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.