💡Problem Solving/Programmers
[프로그래머스] 다단계 칫솔 판매 (Java)
gom20
2021. 12. 2. 23:49
문제
https://programmers.co.kr/learn/courses/30/lessons/77486
코딩테스트 연습 - 다단계 칫솔 판매
민호는 다단계 조직을 이용하여 칫솔을 판매하고 있습니다. 판매원이 칫솔을 판매하면 그 이익이 피라미드 조직을 타고 조금씩 분배되는 형태의 판매망입니다. 어느정도 판매가 이루어진 후,
programmers.co.kr
풀이
구현 문제이다.
name, referral, amount를 멤버로 가지는 Seller 클래스와
key:name, value:Seller를 가지는 HashMap을 구현하여 문제를 풀었다.
소스코드
import java.util.*;
class Seller {
String name;
String referral;
int amount;
public Seller (String name, String referral){
this.name = name;
this.referral = referral;
}
}
class Solution {
public int[] solution(String[] enrolls, String[] referrals, String[] sellers, int[] amounts) {
// key: 이름, value: 직원 객체 맵을 만든다.
HashMap<String, Seller> sellerMap = new HashMap<String, Seller>();
for(int i = 0; i < enrolls.length; i++){
sellerMap.put(enrolls[i], new Seller(enrolls[i], referrals[i]));
}
// 직원 별 판매 금액 합계를 낸다.
for(int i = 0; i < sellers.length; i++){
int profit = amounts[i]*100;
Seller seller = sellerMap.get(sellers[i]);
int idx = 0;
while(true){
seller.amount += profit;
seller.amount -= profit/10;
profit = profit/10;
if(profit == 0 || seller.referral.equals("-")) break;
seller = sellerMap.get(seller.referral);
}
}
int[] answer = new int[enrolls.length];
for(int i = 0; i < enrolls.length; i++){
answer[i] = sellerMap.get(enrolls[i]).amount;
}
return answer;
}
}