https://programmers.co.kr/learn/courses/30/lessons/77486
문제분석
문제가 길어서 링크로 대체합니다.
배열의 길이가 같은 enroll 과 referral이 주어집니다.
이 enroll은 판매자를 나타내고, referral은 판매자와의 상속관계를 나타냅니다.
배열의 길이가같은 seller와 amount가 주어집니다.
seller는 수익을 낸 판매자를 나타내고, amount는 판매자의 칫솔갯수를 나타냅니다.
목표:모든 참가자의 수익 계산하기
수익을 측정할때 특수한 규칙이 적용됩니다.
자식 판매자가 수익을내면 90%를가져가고, 부모에게 10%를 줍니다.
부모 역시 그 값의 90%를 본인이 가져간뒤, 10%를 부모에게 드립니다.
이와 같은 규칙을 반복하다가, 수익이 1원 미만이 되면 본인이 전부가집니다.
문제풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import java.util.*;
class Solution {
public int[] solution (String[] enroll, String[] referral, String[] seller, int[] amount) {
int[] answer = new int[enroll.length];
Map<String,String> root = new HashMap<>();
Map<String,Integer> total= new HashMap<>();
for(int i=0;i<enroll.length;i++){
if(referral[i].equals("-")){
root.put(enroll[i],"center");
}
else{
root.put(enroll[i],referral[i]);
}
total.put(enroll[i],0);
}
for(int i=0;i<seller.length;i++){
String kid=seller[i];
String parent=root.get(seller[i]);
int money=amount[i]*100;
while(true){
total.put(kid,total.get(kid)+money-money/10);
money/=10;
if(money==0||parent.equals("center")){
break;
}
kid=parent;
parent=root.get(kid);
}
}
for(int i=0;i<enroll.length;i++){
answer[i]=total.get(enroll[i]);
}
return answer;
}
}
|
cs |
2개의 맵을 생성했습니다. root맵은 (자식,부모) 키밸류값으로 상속관계를 확인하는 용도입니다.
total맵은 (판매자,총액) 키밸류값으로 본인의 수익을 추가 및 확인하는 용도입니다.
9~17 라인에서 root의 상속관계와 total의 총액을 0으로 설정합니다.
19~33 라인은 매번 변하는 kid,parent,money의 초기값을 설정합니다.
그리고, money의 총액-수익/10을 본인이 받고, 수익의 10프로를 부모로 올립니다.
(여기서 잠깐, (money/10)*9나 money*0.9하면 틀립니다.)
그리고, 참가자가 참여한순대로 answer배열에 출력하면 끝입니다.
참고로, 테스트 11~13은 (수익이 1원 미만이 되면 본인이 전부가집니다.)의 규칙을 지키지않으면 틀립니다.
문제가 너무길어서 놓치기 쉬운 실수입니다.
26번의 money==0일때도 꼭 break하여서 시간초과 하지않으셔야합니다.
'알고리즘 > 프로그래머스 Level3' 카테고리의 다른 글
[프로그래머스,Java] Level3: 선입 선출 스케줄링 (0) | 2022.07.30 |
---|---|
[프로그래머스,JAVA] Level3: 입국심사 (0) | 2022.07.29 |
[프로그래머스,Java] Level3: 베스트앨범 (0) | 2022.07.13 |
[프로그래머스,자바] Level3: 추석 트래픽 (0) | 2022.02.13 |
[프로그래머스,Java] Levle3: 위클리챌린지 11주차[아이템 줍기] (1) | 2021.10.19 |