프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
내 코드 (시간 초과)
function solution(enroll, referral, seller, amount) {
const list = enroll.reduce((acc, cur) => {
acc[cur] = 0;
return acc;
}, {});
seller.forEach((name, idx) => {
let ref = name;
let benefit = amount[idx] * 10;
list[ref] += amount[idx] * 100 - benefit;
while(referral[enroll.indexOf(ref)] !== '-' && benefit > 0){
ref = referral[enroll.indexOf(ref)];
list[ref] += benefit - Math.floor(benefit / 10);
benefit = Math.floor(benefit / 10);
}
})
return Object.values(list);
}
테스트 케이스
1. 각 사람의 이익 초기화
2. 셀러 young - 12 (1,200원 이익)이면,
그 추천인들인 edward, mary, center 순서대로 이익을 분배해야 한다. 즉,
2-0. 첫 셀러 young은 amount[idx] * 100 - benefit = 1200 - 120 = 1080
2-1. enroll에서 해당 셀러의 인덱스를 찾는다. = 7
2-2. 추천인 배열에서 해당 인덱스의 값을 찾는다. = edward
2-3. 해당 사람에게 보유 금액 + benefit - Math.floor(benefit / 10)을 해준다. = 120 - 12 = 108
2-4. 이후 이익금은 Math.floor(benefit / 10) = 120 / 10 = 12
이 과정을 추천인 배열 값이 '-'가 아니고 이익금이 0보다 클 때까지 반복한다.
이렇게 했더니 마지막 테스트케이스 10-13에서 시간 초과가 났다.
코드 수정
function solution(enroll, referral, seller, amount) {
const list = enroll.reduce((acc, cur) => {
acc[cur] = 0; // 각 사람의 이익 초기화
return acc;
}, {});
// 추천인 정보
const referralList = enroll.reduce((acc, cur, idx) => {
acc[cur] = referral[idx];
return acc;
}, {});
seller.forEach((name, idx) => {
let ref = name;
let money = amount[idx] * 100;
while(ref !== '-' && money > 0){
benefit = Math.floor(money / 10);
list[ref] += money - benefit;
ref = referralList[ref];
money = benefit
}
})
return Object.values(list);
}
1. 각 사람에 대한 추천인도 referralLis 객체로 만들어준다.
이전 코드에서 ref = referral[enroll.indexOf(ref)]로 찾았던 방식 대신
referralLis 객체에서 바로 찾는다.
2. 그리고 이전에는 첫 이익금 이후 10%의 이익 benefit을 기준으로 계산했는데
처음 이익금 amount[idx] * 100 = money를 기준으로 이후 이익금을 계산하고
while문 안에서 처음부터 처리하도록 했다.
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/JavaScript] Lv3. 길 찾기 게임 (0) | 2025.03.24 |
---|---|
[프로그래머스/JavaScript] Lv2. 게임 맵 최단거리 (1) | 2025.03.04 |
[프로그래머스/JavaScript] Lv2. 메뉴 리뉴얼 (1) | 2024.11.08 |
[프로그래머스/JavaScript] Lv1. 신고 결과 받기 (0) | 2024.11.06 |
[프로그래머스/JavaScript] Lv3. 베스트 앨범 (0) | 2024.11.05 |