문제
https://programmers.co.kr/learn/courses/30/lessons/77486
코딩테스트 연습 - 다단계 칫솔 판매
민호는 다단계 조직을 이용하여 칫솔을 판매하고 있습니다. 판매원이 칫솔을 판매하면 그 이익이 피라미드 조직을 타고 조금씩 분배되는 형태의 판매망입니다. 어느정도 판매가 이루어진 후,
programmers.co.kr
문제 접근
key-value로 연결 시켜주어서 비용을 구하는 방식
while 로 돌아갈 경우에 sellerAmount는 10% 한 값이 되어야 한다.
결과 answer 를 도출할 때에는 enroll의 이름 기준으로 정렬되어야 한다.
문제 풀이 코드
package D_2021_TopSession;
import java.util.HashMap;
import java.util.Map;
public class S_77486 {
public static void main(String[] args) {
// String[] enroll = {"john", "mary", "edward", "sam", "emily", "jaimie", "tod", "young"};
// String[] referral = {"-", "-", "mary", "edward", "mary", "mary", "jaimie", "edward"};
// String[] seller = {"young", "john", "tod", "emily", "mary"};
// int[] amount = {12, 4, 2, 5, 10};
// "john", "mary", "edward", "sam", "emily", "jaimie", "tod", "young"
// [360, 958, 108, 0, 450, 18, 180, 1080]
String[] enroll = {"john", "mary", "edward", "sam", "emily", "jaimie", "tod", "young"};
String[] referral = {"-", "-", "mary", "edward", "mary", "mary", "jaimie", "edward"};
String[] seller = {"sam", "emily", "jaimie", "edward"};
int[] amount = {2, 3, 5, 4};
// "john", "mary", "edward", "sam", "emily", "jaimie", "tod", "young"
// 0, 110, 378, 180, 270, 450, 0, 0
int[] result = solution(enroll,referral,seller,amount);
System.out.print("[");
for(int rs : result) {
System.out.print(rs+", ");
}
System.out.println("]");
}
public static int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) {
int[] answer = new int[enroll.length];
Map<String, String> erMap = new HashMap<>();
Map<String, Integer> erMoneyMap = new HashMap<>();
for(int i=0;i<enroll.length;i++) {
erMap.put(enroll[i], referral[i]);
erMoneyMap.put(enroll[i], 0);
}
for(int j=0;j<seller.length;j++) {
String sellerNm = seller[j];
int sellerAmount = amount[j]*100;
int sellerAmount10Percent = 0;
while(erMap.containsKey(sellerNm)) {
sellerAmount10Percent = sellerAmount/10;
erMoneyMap.put(sellerNm, erMoneyMap.get(sellerNm)+(sellerAmount-sellerAmount10Percent));
sellerAmount = sellerAmount10Percent;
if(sellerAmount<1) {
break;
}
sellerNm = erMap.get(sellerNm);
}
}
for(int k=0;k<enroll.length;k++) {
answer[k] = erMoneyMap.get(enroll[k]);
}
return answer;
}
}
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 합승 택시 요금(72413) (0) | 2021.10.24 |
---|---|
[프로그래머스] 행렬 테두리 회전하기(77485) (0) | 2021.10.13 |
[프로그래머스] 로또의 최고 순위와 최저 순위(77484) (0) | 2021.10.13 |
[코딩문제] 후위표현식 문제 (0) | 2021.04.08 |
[프로그래머스] 디스크 컨트롤러(42627)_Heap (0) | 2020.12.30 |