๊ด€๋ฆฌ ๋ฉ”๋‰ด

Unfazedโ—๏ธ๐ŸŽฏ

[Java] ํŠธ๋ฆฌ, ๊ตฌํ˜„ | ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋‹ค๋‹จ๊ณ„ ์นซ์†” ํŒ๋งค ๋ณธ๋ฌธ

๋ฌธ์ œ ํ•ด๊ฒฐ (PS)/์ฝ”ํ…Œ TIL

[Java] ํŠธ๋ฆฌ, ๊ตฌํ˜„ | ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋‹ค๋‹จ๊ณ„ ์นซ์†” ํŒ๋งค

9taetae9 2024. 11. 6. 10:59
728x90

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

 

๋ฌธ์ œ ๊ฐœ์š”
๋‹ค๋‹จ๊ณ„ ํŒ๋งค ์กฐ์ง์—์„œ ๊ฐ ํŒ๋งค์›์˜ ์ด์ต์„ ๊ณ„์‚ฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์˜€๋‹ค.

์ฃผ์š” ๊ทœ์น™์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • ํŒ๋งค์›์ด ๋ฐœ์ƒ์‹œํ‚จ ์ด์ต์˜ 10%๋ฅผ ์ถ”์ฒœ์ธ์—๊ฒŒ ๋ถ„๋ฐฐ(1์› ๋ฏธ๋งŒ์€ ๋ถ„๋ฐฐํ•˜์ง€ ์•Š์Œ)
  • ๋‚˜๋จธ์ง€๋Š” ์ž์‹ ์ด ๊ฐ€์ง
  • ์ด ๊ณผ์ •์ด ์žฌ๊ท€์ ์œผ๋กœ ์ƒ์œ„ ์ถ”์ฒœ์ธ์—๊ฒŒ๋„ ์ ์šฉ๋จ

์ฒ˜์Œ ์‹œ๋„ํ•œ ๋ฐฉ๋ฒ•

class Node {
    String name;
    Node parent;
    int income;
   
}
  • ์ฒ˜์Œ์—๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด Node ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋ฌธ์ œํ•ด๊ฒฐ์„ ์‹œ๋„ํ•ด๋ณด์•˜๋‹ค.
  • ๊ฐ ํŒ๋งค์›์„ ๋…ธ๋“œ๋กœ ์ƒ์„ฑํ•˜๊ณ  ํฌ์ธํ„ฐ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์ƒ๊ฐํ–ˆ์ง€๋งŒ
  • ํŒ๋งค์› ๊ฒ€์ƒ‰๊ณผ ์ˆ˜์ต ๊ฐฑ์‹  ๊ณผ์ •์— ์žˆ์–ด์„œ ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

์ ‘๊ทผ ๋ฐฉ๋ฒ•

  • ์ž๋ฃŒ๊ตฌ์กฐ ์„ ํƒ
    • HashMap์„ ํ™œ์šฉํ•˜์—ฌ ๋‘ ๊ฐ€์ง€ ๋งคํ•‘ ๊ด€๊ณ„๋ฅผ ์ €์žฅ
      • worker : ํŒ๋งค์› -> ์ถ”์ฒœ์ธ ๊ด€๊ณ„  // Map<String, String> worker = new HashMap<>();
      • ํŒ๋งค์›๋“ค์˜ ๊ด€๊ณ„๋ฅผ ํ•ด์‹œ๋งต worker๋กœ  ํ‘œํ˜„
      • income: ํŒ๋งค์› -> ์ˆ˜์ต๊ธˆ ๊ด€๊ณ„  // Map<String, Integer> income = new HashMap<>();
      • ํŒ๋งค์› ์ด๋ฆ„์„ ํ‚ค๋กœ, ๋ˆ„์  ์ด์ต์„ ๊ฐ’์œผ๋กœ ํ•˜๋Š” ํ•ด์‹œ๋งต income์„ ์‚ฌ์šฉ
for(int i=0; i < enroll.length; i++){
    worker.put(enroll[i], referral[i]);
    income.put(enroll[i], 0);
}
  • ์ด์ต ๋ถ„๋ฐฐ ๋กœ์ง
    • ์ด ์ด์ต = ๊ฐ ํŒ๋งค ๊ฑด์ˆ˜ * 100
    • ์ƒ์œ„ ์ถ”์ฒœ์ธ์œผ๋กœ ์˜ฌ๋ผ๊ฐ€๋ฉด์„œ 10% ๋ถ„๋ฐฐ, ๋‚˜๋จธ์ง€๋Š” ์ž์‹ ์ด ๊ฐ€์ง
    • ๋ถ„๋ฐฐ ๊ธˆ์•ก์ด 0์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
    • ๋ฐ˜๋ณต ์ข…๋ฃŒ ์กฐ๊ฑด : ์ถ”์ฒœ์ธ ์—†๋Š” ๊ฒฝ์šฐ ("-"), ๋ถ„๋ฐฐํ•  ์ด์ต์ด ์—†์„ ๊ฒฝ์šฐ (currentIncome > 0)
for(int i=0; i < seller.length; i++){
    String currentSeller = seller[i];
    int currentIncome = amount[i] * 100;

    while(!currentSeller.equals("-") && currentIncome > 0){
        int shareIncome = currentIncome/10;
        int earn = currentIncome - shareIncome;
        income.put(currentSeller, income.get(currentSeller)+earn);

        currentSeller = worker.get(currentSeller);
        currentIncome = shareIncome;
    }
}

 

 

๋ฐฐ์šด ์  

์ฒ˜์Œ ์ ‘๊ทผํ•  seller์— ๋Œ€ํ•œ ๋…ธ๋“œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ํฌ์ธํ„ฐ๋กœ ํŠธ๋ฆฌ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ–ˆ์ง€๋งŒ ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š์•˜๋‹ค.

ํŠธ๋ฆฌ ๊ตฌ์กฐ(ex : ๋‹ค๋‹จ๊ณ„) => ํ•ด๋‹น ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ ๋‹จ์ˆœ ์ƒํ–ฅ ํƒ์ƒ‰๋งŒ ํ•„์š”ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— HashMap์œผ๋กœ ๊ตฌํ˜„์ด ์ถฉ๋ถ„ํ–ˆ๋‹ค. ํ•ด๋‹น ๋ฌธ์ œ์— ์‹ค์ œ๋กœ ํ•„์š”ํ•œ ๊ตฌํ˜„๋งŒ ํ•˜๋ฉด ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ๋„ Node ํด๋ž˜์Šค์˜ ๊ตฌํ˜„์ด ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๋ฐ ์žˆ์–ด์„œ ์ •๋ง ์ตœ์„ ์ธ์ง€ ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ด์•ผ๊ฒ ๋‹ค.

๋˜ํ•œ ๋นˆ๋ฒˆํ•œ ์กฐํšŒ๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ, ๋ฐ์ดํ„ฐ ๊ฐ„ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์ผ ๋•Œ HashMap ํ™œ์šฉ์„ ์šฐ์„ ์ ์œผ๋กœ ๊ณ ๋ คํ•ด๋ณด์•„์•ผ๊ฒ ๋‹ค.

 

 

728x90