-
[프로그래머스] 다단계 칫솔 판매 (JAVA)코딩테스트/프로그래머스 2022. 3. 9. 01:18
프로젝트 하느랴, 새로운 스택 쌓으랴 너무 바빠서 코테를 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