-
[알고리즘] 프로그래머스 3단계 - 다단계 칫솔판매Algorithm 2024. 4. 23. 10:32
프로그래머스 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/77486
문제 설명
칫솔의 1개당 가격은 100원이며 각 판매원 마다 추천인이 있을 수 있고 없을 수 있는데 판매원이 갖을 수있는 추천인은 최대 한명이다.
판매원에게 추천인이 있다면 판매 금액의 10퍼센트를 자신의 추천인에게 줘야한다.
마찬가지로 10퍼센트를 받은 추천인에게도 추천인이 있다면 받은 금액의 10퍼센트를 추천인에게 줘야한다.
여기서 판매원과, 추천인, 판매한 사람, 판매 금액이 주어졌을때 최종적으로 판매원들의 각 매출을 배열로 리턴한다.
예시
enroll
["john", "mary", "edward", "sam", "emily", "jaimie", "tod", "young"]referral
["-", "-", "mary", "edward", "mary", "mary", "jaimie", "edward"]
seller
["young", "john", "tod", "emily", "mary"]
amount
[12, 4, 2, 5, 10]
result
[360, 958, 108, 0, 450, 18, 180, 1080]
문제 풀이
import java.util.Arrays; import java.util.HashMap; class Solution { public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) { // 판매 단가 int price = 100; // 판매원 정보 맵 HashMap<String, Enroll> enrollHashMap = new HashMap<>(); // 센터는 정보가 배열에 없기 때문에 하드코딩 enrollHashMap.put("-", new Enroll("-", 0, null)); // 판매원 정보 등록 for (int i = 0; i < enroll.length; i++) { enrollHashMap.put(enroll[i], new Enroll(enroll[i], 0, null)); } // 추천인 정보 등록 for (int i = 0; i < enroll.length; i++) { enrollHashMap.get(enroll[i]).setParent(enrollHashMap.get(referral[i])); } // 수익금 분배 시작 for (int i = 0; i < seller.length; i++) { enrollHashMap.get(seller[i]).earnMoney(amount[i] * price); } // 정답에 맞게 배열 리턴 return Arrays.stream(enroll).map(member -> enrollHashMap.get(member).money).mapToInt(item -> item).toArray(); } } class Enroll { // 판매원 이름 String name; // 판매한 금액 int money; // 추천인 Enroll parent; public Enroll(String name, int money, Enroll parent) { this.name = name; this.money = money; this.parent = parent; } // 현재 판매원이 얻은 금액 public void earnMoney(int earnMoney) { int repayMoney = earnMoney / 10; this.money += earnMoney - repayMoney; repayment(repayMoney); } // 얻은 후 추천인에게 10퍼센트 전달 public void repayment(int repayMoney) { if (repayMoney <= 0) { return; } if (parent != null) { this.parent.earnMoney(repayMoney); } } public void setParent(Enroll parent) { this.parent = parent; } }
묘공단 책에 문제보다는 길게 풀었지만 도메인을 분리해서 좀 더 이해하기는 편하게 만들었다고 생각한다.
'Algorithm' 카테고리의 다른 글
[알고리즘] 코딩 테스트 합격자 되기 - 해시, 트리 (0) 2024.04.26 [알고리즘] 프로그래머스 3단계 - 길 찾기 게임 (0) 2024.04.24 [알고리즘] 백준 - 명령프롬프트(문자열) (0) 2024.04.22 [알고리즘] 백준 - 균형 잡힌 세상(스택) (0) 2024.04.18