티스토리 뷰
728x90
문제 링크
programmers.co.kr/learn/courses/30/lessons/77486
풀이
칫솔을 팔아서 한 번에 얻을 수 있는 이익이 최대 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
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[BOJ] 백준 16935 - 배열 돌리기 3 (Javascript) (1) | 2021.05.03 |
---|---|
[프로그래머스] 행렬 테두리 회전하기 (2021 Dev-Matching) (0) | 2021.05.02 |
[프로그래머스] 삼각 달팽이 (월간 코드 챌린지 시즌 1) (0) | 2021.04.15 |
[프로그래머스] 쿼드압축 후 개수 세기 (월간 코드 챌린지 시즌 1) (0) | 2021.04.15 |
[프로그래머스] 이진 변환 반복하기 (월간 코드 챌린지 시즌 1) (0) | 2021.04.15 |
댓글