Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
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
Archives
Today
Total
관리 메뉴

Life Engineering

[프로그래머스] 다단계 칫솔 판매 (JAVA) 본문

Problem Solving

[프로그래머스] 다단계 칫솔 판매 (JAVA)

흑개 2022. 1. 23. 00:30

https://programmers.co.kr/learn/courses/30/lessons/77486

 

코딩테스트 연습 - 다단계 칫솔 판매

민호는 다단계 조직을 이용하여 칫솔을 판매하고 있습니다. 판매원이 칫솔을 판매하면 그 이익이 피라미드 조직을 타고 조금씩 분배되는 형태의 판매망입니다. 어느정도 판매가 이루어진 후,

programmers.co.kr

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 있는지 검사할 필요도 없다.