-
[프로그래머스] 다단계 칫솔 판매 (JAVA)코딩테스트/프로그래머스 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