코딩테스트/프로그래머스
[Java] 프로그래머스 - 다단계 칫솔 판매 (3단계)
배똥회장
2022. 6. 7. 10:46
728x90
코딩 테스트 풀이 체크리스트 |
|
2시간 내에 풀었는가? | O |
본인의 실력으로 풀었는가? | O |
코딩테스트 연습 - 다단계 칫솔 판매
민호는 다단계 조직을 이용하여 칫솔을 판매하고 있습니다. 판매원이 칫솔을 판매하면 그 이익이 피라미드 조직을 타고 조금씩 분배되는 형태의 판매망입니다. 어느정도 판매가 이루어진 후,
programmers.co.kr
import java.util.*;
class Solution {
//이름에 대한 부모와 자기 포인트 확인용 해시맵
HashMap<String, Family> map;
public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) {
int[] answer = new int[enroll.length];
map = new HashMap<>();
//본인에 대한 부모와 포인트 설정
for (int i = 0; i < enroll.length; i++) {
Family f = new Family(referral[i], 0);
map.put(enroll[i], f);
}
//센터는 따로 enroll에 없기 때문에 따로 추가하기
map.put("-", new Family("", 0));
for (int i = 0; i < seller.length; i++) {
int money = amount[i] * 100; //판매금액
String son = seller[i]; //판매자
//센터까지 올라가야하기 때문에 while문 활용
while (true) {
//부모에게 넘길 돈 현재 금액의 10%
int parentMoney = (int) (money * 0.1);
//부모에게 주고 남은 돈
int sonMoney = money - parentMoney;
//남은 돈은 추가하고, 부모 이름 리턴
son = map.get(son).addPoint(sonMoney);
//부모에게 넘길 돈으로 현재 금액 설정하기
money = parentMoney;
//만약 부모에게 넘길 돈이 0원이거나 부모가 없는 경우(센터일 경우) while문 탈출
if (son.equals("") || money == 0) break;
}
}
//enroll로 answer에 포인트 값 넣기
for (int i = 0; i < enroll.length; i++) {
answer[i] = map.get(enroll[i]).point;
}
return answer;
}
}
class Family {
String parent;
int point;
public Family(String parent, int point) {
this.parent = parent;
this.point = point;
}
public String addPoint(int point) {
this.point += point;
return parent;
}
}
테스트 1 〉 | 통과 (0.28ms, 83.4MB) |
테스트 2 〉 | 통과 (0.42ms, 95.5MB) |
테스트 3 〉 | 통과 (0.33ms, 79.8MB) |
테스트 4 〉 | 통과 (0.41ms, 79.7MB) |
테스트 5 〉 | 통과 (0.84ms, 72.2MB) |
테스트 6 〉 | 통과 (4.60ms, 105MB) |
테스트 7 〉 | 통과 (4.57ms, 103MB) |
테스트 8 〉 | 통과 (6.65ms, 97.5MB) |
테스트 9 〉 | 통과 (17.94ms, 98.1MB) |
테스트 10 〉 | 통과 (38.93ms, 131MB) |
테스트 11 〉 | 통과 (28.77ms, 133MB) |
테스트 12 〉 | 통과 (37.54ms, 130MB) |
테스트 13 〉 | 통과 (18.79ms, 141MB) |
728x90