티스토리 뷰

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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
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 31
글 보관함