-
[알고리즘] 프로그래머스 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