프로그래머스 문제풀이 (알고리즘) - 다단계 칫솔판매
풀이
하나는 referral 의 인덱스값(참조값)을 저장할 배열을 만들고, 또 하나에는 배분 받은 수익을 저장하는 배열을 만들면 쉽게 풀 수 있는 문제.
그러나 이런 절차지향적 코드는 읽기 어려울 것이라고 생각해서, 객체 지향적으로 "직원"이 있다고 생각하고 직원은 각각의 "추천직원"에 대한 참조 값을 저장하는 방법으로 접근하였음
public class Solution {
public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) {
// 직원의 참조 값을 저장
List<Employee> employees = new ArrayList<>();
Employee center = new Employee("민호", null);
employees.add(center);
// 추천인이 없으면 center 가 부모가 되고 있으면 해당 추천인이 부모가 됨
for (int i=0; i<enroll.length; i++) {
if ("-".equals(referral[i]))
employees.add(new Employee(enroll[i], center));
else
employees.add(new Employee(enroll[i], findEmployee(employees, referral[i])));
}
// 수익 배분 시작
for (int i=0; i<seller.length; i++) {
findEmployee(employees, seller[i]).setProfit(amount[i] * 100);
}
employees.remove(0);
return employees.stream().mapToInt(s -> s.getProfit()).toArray();
}
// 직원을 찾습니다.
public Employee findEmployee(List<Employee> employees, String name) {
for (int i=employees.size() - 1; i>0; i--) {
if (employees.get(i).getName().equals(name))
return employees.get(i);
}
return null;
}
static class Employee {
// 직원의 이름
private String name;
// 추천인
private Employee referral;
// 자신이 배분받을 수익
private int profit;
public Employee(String name, Employee referral) {
this.name = name;
this.referral = referral;
}
// 자신이 수익을 배분 받으면 자동으로 추천인을 찾아 10 % 를 나눈다.
public void setProfit(int profit) {
if (referral == null)
this.profit += profit;
else {
int rest = profit / 10;
if (rest >= 1)
referral.setProfit(rest);
this.profit += profit - rest;
}
}
public int getProfit() {
return profit;
}
public String getName() {
return name;
}
}
}
'알고리즘 > 문제풀이' 카테고리의 다른 글
프로그래머스 문제풀이 (알고리즘) - 표 편집 [2021 카카오 채용연계형 인턴십] (0) | 2021.08.19 |
---|---|
프로그래머스 문제풀이(알고리즘) - 보석 쇼핑[카카오 인턴] (0) | 2021.08.18 |
프로그래머스 문제풀이 (알고리즘) - 셔틀버스 (0) | 2021.08.12 |
프로그래머스 문제풀이 (알고리즘) - N-Queen (0) | 2021.08.11 |
프로그래머스 문제풀이 (알고리즘) - 하노이 탑 (0) | 2021.08.10 |
댓글
이 글 공유하기
다른 글
-
프로그래머스 문제풀이 (알고리즘) - 표 편집 [2021 카카오 채용연계형 인턴십]
프로그래머스 문제풀이 (알고리즘) - 표 편집 [2021 카카오 채용연계형 인턴십]
2021.08.19 -
프로그래머스 문제풀이(알고리즘) - 보석 쇼핑[카카오 인턴]
프로그래머스 문제풀이(알고리즘) - 보석 쇼핑[카카오 인턴]
2021.08.18 -
프로그래머스 문제풀이 (알고리즘) - 셔틀버스
프로그래머스 문제풀이 (알고리즘) - 셔틀버스
2021.08.12 -
프로그래머스 문제풀이 (알고리즘) - N-Queen
프로그래머스 문제풀이 (알고리즘) - N-Queen
2021.08.11