Life Engineering
[프로그래머스] 다단계 칫솔 판매 (JAVA) 본문
https://programmers.co.kr/learn/courses/30/lessons/77486
import java.util.*;
class Solution {
public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) {
int[] answer = new int[enroll.length];
String refer;
int price, sum;
Map<String,String> m=new HashMap<>();
Map<String, Integer> ans=new HashMap<>();
for (int i=0; i<enroll.length; i++){
m.put(enroll[i], referral[i]);
}
for (int i=0; i<seller.length; i++){
refer=seller[i];
price=amount[i]*100;
while (!refer.equals("-")){
sum=ans.containsKey(refer)?ans.get(refer):0;
if (price<10){
ans.put(refer,sum+price);
break;
}
else{
ans.put(refer, sum+(price-(price*1/10)));
price/=10;
}
refer=m.get(refer);
}
}
for (int i=0; i<enroll.length; i++){
if (ans.containsKey(enroll[i])){
answer[i]=ans.get(enroll[i]);
}
}
return answer;
}
}
map을 2개 써서, 각 member와 그 referer을 연결해줘서 "-"를 만날 때까지 계속 반복문을 돌려주는 식으로 했다.
referer을 찾는 map과, 결과를 저장하는 map을 만들었다. 최종적으로 결과 저장하는 map을 돌아서 answer 배열을 완성하는 식으로 했다.
다른 분들의 코드를 보니, 조금 더 가독성좋게 소개인에게 남겨줄 금액을 뺀 것을 자기 금액으로 취하고, 노드를 이동하면서, price/=10 해주는 방법이 있었다.
또한 결과를 저장하는 map 을 만드는 대신, 대신 answer 배열의 인덱스 값과 enroll에 담긴 이름을 매칭시키는 map을 만들어서, answer 배열에 바로 넣을 수 있었다. answer[memberIndex.get(now)]+=price 와 같은 형태로!
그러면 map에 넣을때 key 있는지 검사할 필요도 없다.
'Problem Solving' 카테고리의 다른 글
[프로그래머스] 보석 쇼핑 (Java) (0) | 2022.01.25 |
---|---|
[BOJ 2615] 오목 (JAVA) (0) | 2022.01.24 |
[프로그래머스] 영어 끝말잇기 (Java) (0) | 2022.01.21 |
[SW Expert 1859] 백만 장자 프로젝트 (JAVA) (0) | 2022.01.21 |
[BOJ 17135] 캐슬 디펜스 (Java) (0) | 2022.01.19 |