[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / Java] - ๋‹ค๋‹จ๊ณ„ ์นซ์†” ํŒ๋งค

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

๋‹ค๋‹จ๊ณ„ ์นซ์†” ํŒ๋งค
์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๋‹ค๋‹จ๊ณ„ ์นซ์†” ํŒ๋งค ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
school.programmers.co.kr

๐Ÿ’ก ๋ฌธ์ œ ํŒŒ์•…

  • ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ์กฐ์ง ์ •๋ณด(enroll, referral)์™€ ํŒ๋งค ์ •๋ณด(seller, amount)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
  • ๊ฐ ํŒ๋งค์›์€ ์ž์‹ ์ด ๋ฒˆ ๋ˆ์˜ 10%๋ฅผ ์ž์‹ ์„ ์ถ”์ฒœํ•œ ์‚ฌ๋žŒ(๋ถ€๋ชจ ๋…ธ๋“œ)์—๊ฒŒ ์ง€๊ธ‰ํ•˜๊ณ , ๋‚˜๋จธ์ง€๋ฅผ ์ž์‹ ์ด ๊ฐ€์ง„๋‹ค.
  • ๋ถ€๋ชจ์—๊ฒŒ ์ „๋‹ฌ๋œ ๋ˆ ์—ญ์‹œ ๊ฐ™์€ ๊ทœ์น™์œผ๋กœ ๋‹ค์‹œ 10%๊ฐ€ ๊ทธ ์œ„ ๋ถ€๋ชจ์—๊ฒŒ ์ „๋‹ฌ๋œ๋‹ค.
  • ๋ชจ๋“  ํŒ๋งค๊ฐ€ ๋๋‚œ ๋’ค, ๊ฐ ์กฐ์ง์›์ด ์ •ํ™•ํžˆ ์–ผ๋งˆ๋ฅผ ๋ฒŒ์—ˆ๋Š”์ง€ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

๐Ÿ—๏ธ ์ ‘๊ทผ ๋ฐฉ๋ฒ•

  • ๊ฐ ํŒ๋งค์›์˜ ๋ถ€๋ชจ(์ถ”์ฒœ์ธ)๋ฅผ ์ €์žฅํ•˜๋Š” parentMap์„ ๋จผ์ € ๊ตฌ์„ฑํ•œ๋‹ค.
  • ํŒ๋งค ์ •๋ณด ํ•˜๋‚˜๋งˆ๋‹ค ํŒ๋งค ๊ธˆ์•ก์„ ๋“ค๊ณ  ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€๋ฉด์„œ 10%์”ฉ ๋ถ„๋ฐฐํ•œ๋‹ค.
    • ๋ถ„๋ฐฐํ•  ๊ธˆ์•ก์ด 1์› ๋ฏธ๋งŒ(์ •์ˆ˜ ๋‚˜๋ˆ—์…ˆ ๊ฒฐ๊ณผ 0)์ด ๋˜๋ฉด ๋” ์ด์ƒ ์œ„๋กœ ์ „๋‹ฌํ•˜์ง€ ์•Š๊ณ  ์ข…๋ฃŒํ•œ๋‹ค.
    • ๋ฃจํŠธ("-")์— ๋„๋‹ฌํ•ด๋„ ์ข…๋ฃŒํ•œ๋‹ค.
  • ๊ธˆ์•ก์„ ๋‹ค๋ฃฐ ๋•Œ ์ค‘๊ฐ„ ๊ณ„์‚ฐ๊ฐ’์ด int ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„ค ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ long์œผ๋กœ ๋ˆ„์ ํ•œ ๋’ค ๋งˆ์ง€๋ง‰์— ๋ณ€ํ™˜ํ•œ๋‹ค.

๐Ÿงฉ ์ฝ”๋“œ ๊ตฌํ˜„

import java.util.*;

class Solution {
    public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) {
        Map<String, String> parentMap = new HashMap<>();
        for (int i = 0; i < enroll.length; ++i) {
            parentMap.put(enroll[i], referral[i]);
        }

        Map<String, Long> profitMap = new HashMap<>();
        for (int i = 0; i < seller.length; ++i) {
            String cur = seller[i];
            long money = (long) amount[i] * 100;

            while (!cur.equals("-")) {
                long distributedMoney = money / 10;
                long myMoney = money - distributedMoney;

                profitMap.merge(cur, myMoney, Long::sum);

                if (distributedMoney == 0) break;

                cur = parentMap.getOrDefault(cur, "-");
                money = distributedMoney;
            }
        }

        int[] answer = new int[enroll.length];
        for (int i = 0; i < enroll.length; ++i) {
            answer[i] = profitMap.getOrDefault(enroll[i], 0L).intValue();
        }
        return answer;
    }
}