코딩테스트/프로그래머스
[프로그래머스] 다단계 칫솔 판매 (JAVA)
DevPing9_
2022. 3. 9. 01:18
코딩테스트 연습 - 다단계 칫솔 판매
민호는 다단계 조직을 이용하여 칫솔을 판매하고 있습니다. 판매원이 칫솔을 판매하면 그 이익이 피라미드 조직을 타고 조금씩 분배되는 형태의 판매망입니다. 어느정도 판매가 이루어진 후,
programmers.co.kr
프로젝트 하느랴, 새로운 스택 쌓으랴 너무 바빠서 코테를 3개월정도 멀리했더니...
이렇게 더러운 코드가 나오는구나... (내일 코테는 통과할 수 있을까...)
# 코드 구현
import java.util.*;
class Solution {
public static int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) {
int[] result = new int[enroll.length];
Map<String, String> refMap = new HashMap<>();
for(int i=0; i<enroll.length;i++){
refMap.put(enroll[i],referral[i]);
}
Map<String, Integer> enrollMap = new HashMap<>();
for(int i=0;i<enroll.length;i++){
enrollMap.put(enroll[i],i);
}
int cnt=0;
for(String employee : seller){
Queue<String> q = new LinkedList<>();
if(refMap.get(employee).equals("-")){
result[enrollMap.get(employee)]+= amount[cnt]*100-(int)Math.floor(amount[cnt]*100*0.1);
cnt++;
continue;
}
int earn = amount[cnt]*100-(int)Math.floor(amount[cnt]*100*0.1);
result[enrollMap.get(employee)]+= earn;
int remain = (int)Math.floor((amount[cnt]*100-earn)*0.1);
int bonus = (amount[cnt]*100-earn)-remain;
result[enrollMap.get(refMap.get(employee))]+= bonus;
q.add(refMap.get(employee));
while(!q.isEmpty()){
String curEmp =q.poll();
String supEmp = refMap.get(curEmp);
if(supEmp.equals("-") || curEmp.equals("-")) break;
if(remain*0.1<1){
result[enrollMap.get(supEmp)]+=remain;
remain=0;
break;
}else{
result[enrollMap.get(supEmp)]+= (remain-(int)Math.floor(remain*0.1));
remain*=0.1;
}
q.add(supEmp);
}
cnt++;
}
return result;
}
}728x90