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

wannabeking·2022년 7월 4일
0

코딩테스트

목록 보기
26/155

재귀함수를 사용 시 쓸데 없는 호출이 있는지 확인하자.

문제 보기



사용한 것

  • 멤버와 추천인을 저장하기 위한 해시 테이블


풀이 방법

  • enroll, referral을 순회하며 멤버와 추천인을 저장한다.
  • sellecr, amount를 순회하며 판매자, 판매한 개수 * 100 로 share()을 호출한다.
    • 이익의 90%를 자신이 가진다.
    • 이익의 10%를 자신의 추천인에게 넘긴다. (단, 이익의 10%가 0원이 아닐 때)
  • enroll을 순회하며 money에서 멤버를 검색하여 result에 넣는다.
  • result를 반환한다.


코드

import java.util.HashMap;
import java.util.Map;

class Solution {

    Map<String, String> parent = new HashMap<>();
    Map<String, Integer> money = new HashMap<>();

    public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) {
        for (int i = 0; i < enroll.length; i++) {
            parent.put(enroll[i], referral[i]);
        }

        for (int i = 0; i < seller.length; i++) {
            share(seller[i], amount[i] * 100);
        }

        int[] result = new int[enroll.length];
        for (int i = 0; i < enroll.length; i++) {
            result[i] = money.getOrDefault(enroll[i], 0);
        }

        return result;
    }

    void share(String node, int sales) {
        int nextSales = sales / 10;
        money.put(node, money.getOrDefault(node, 0) + sales - nextSales);

        if (nextSales > 0 && parent.containsKey(node)) {
            share(parent.get(node), nextSales);
        }
    }
}


profile
내일은 개발왕 😎

0개의 댓글