-
[프로그래머스] 다단계 칫솔 판매코딩테스트 문제풀이 2021. 10. 12. 23:27
문제
풀이
import java.util.*; class Solution { public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) { int len = enroll.length; int[] answer = new int[len]; Map<String, String> parentMap = new HashMap<String, String>(); for (int i = 0; i < len; i++) { parentMap.put(enroll[i], referral[i]); } Map<String, Integer> map = new HashMap<String, Integer>(); for (int i = 0; i < seller.length; i++) { int sum = amount[i] * 100; divide(parentMap, map, seller[i], sum); } Iterator<String> iterator = map.keySet().iterator(); while(iterator.hasNext()) { String person = iterator.next(); for (int i = 0; i < len; i++) { if (enroll[i].equals(person)) { answer[i] = map.get(person); } } } return answer; } public void divide(Map<String, String> parentMap, Map<String, Integer> map, String seller, int amount) { String parent = parentMap.get(seller); if (parent == null) { return; } int dividedAmount = amount / 10; if (dividedAmount == 0) { map.put(seller, map.getOrDefault(seller, 0) + amount); return; } map.put(seller, map.getOrDefault(seller, 0) + amount - dividedAmount); divide(parentMap, map, parent, dividedAmount); } }
- 재귀를 통해 금액을 가장 루트노드에 도착할 때 까지 10:90으로 나누어 배분한다.
출처: https://programmers.co.kr/learn/courses/30/lessons/77486
'코딩테스트 문제풀이' 카테고리의 다른 글
[백준 10870] 피보나치 수 5 (1) 2021.12.14 [프로그래머스] 표 편집 (0) 2021.10.14 [백준 1931] 회의실 배정 - 그리디 알고리즘 (0) 2021.10.12 [백준 1920] 수찾기 - 이분탐색 (0) 2021.10.07 [프로그래머스] 야근지수 (0) 2021.10.06