본문 바로가기
알고리즘

[프로그래머스] 다단계 칫솔 판매 - java

by 육빔 2024. 8. 17.
728x90
반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 풀이

 

처음 이 문제를 봤을때 사실 트리로 이걸 어떻게 구현하나 고민하였었다. 근데 생각해보니 트리는 자료구조와 while문을 잘 활용하여 충분히 구현가능하다는 것을 느끼고 처음 접근을 빠르게 하기 위해 해쉬맵에 자식 부모 해시맵을 생성한 후 점수 해시맵을 통하여 while문을 통하여 점수를 계속 갱신해주는 방식으로 풀면 된다.

 

 

코드

import java.util.*;
class Solution {
    public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) {
        HashMap<String, String> parent = new HashMap<>();
        
        for(int i=0; i<enroll.length; i++){
            parent.put(enroll[i], referral[i]);
        }
        
        HashMap<String, Integer> total = new HashMap<>();
        
        for(int i=0; i<seller.length; i++){
            String person = seller[i];
            int money = amount[i] * 100;
            while(money > 0 && !person.equals("-")){
                total.put(person, total.getOrDefault(person, 0) + money - (money / 10));
                person = parent.get(person);
                money /= 10;
            }
        }
        int[] answer = new int[enroll.length];
        
        for(int j=0; j<enroll.length; j++){
            answer[j] = total.getOrDefault(enroll[j], 0);
        }
        return answer;
    }
}

 

완성

728x90
반응형