원하는 것은 뭐든지

99클럽 코테 스터디 9일차 - 프로그래머, 다단계 칫솔 판매 본문

개발/문제풀이

99클럽 코테 스터디 9일차 - 프로그래머, 다단계 칫솔 판매

댕로그😏 2024. 11. 5. 14:58
반응형

문제 풀이 예상 시간보다 지나가면 다른 해석을 보고 있습니다. 

문제

풀이

문제 해석

1. 위와 같이 young에게 1200원의 수익이 발생하면 수익의 10%는 추천인에게 올린다 young -120->edward

2. edward는 자신의 추천인에게 또 10%를 넘긴다. edward -12-> mary

3. mary는 또다시 자신의 추천인에게 10%를 넘겨야 하는데 추천인이 따로 없고 회사다. mary -1->center

4. 이처럼 자신이 얻는 수익의 10%만 위로 올리고 나머지는 내가 먹는다.

5. 1의 자리까지만 넘기고 나머지는 버림 한다.

6. 입력으로 등록인원배열, 인원의 같은 크기의 배열로 추천인배열, 수익자 배열, 수익자 배열과 같은 크기의 배열로 양 배열

7. 각 인원이 얻는 수익을 출력해라

문제 풀이

1. dfs로도 풀이할 수 있겠으나 사실 한 방향으로 직진만 하기 때문에 단순 구현으로 풀이했음

2. 코드 참고

소스코드

import java.util.*;
class Solution {
    public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) {
        int len = enroll.length;
        //각 인원의 수익 Map
        Map<String,Integer> money = new HashMap<>();
        //관계 Map
        Map<String, String> relation = new HashMap<>();

        //관계 삽입
        for(int i=0;i<len;i++){
            relation.put(enroll[i], referral[i]);
        }
        
        //각 판매 수익별 반복문
        for(int i=0;i<seller.length;i++){
            //판매자와 총 수익
            String me = seller[i];
            int totalMoney = amount[i] * 100;

            while(true){
            
                String master = relation.get(me);

                int mine = totalMoney - (totalMoney/10);
                //10% 떼고 내가 다먹음
                money.put(me, money.getOrDefault(me,0) + mine);
                //남은 돈 10%
                totalMoney = totalMoney/10;
                //만약 위에가 더 이상 없거나 남은 돈도 0이면 나가!!!
                if(master.equals("-") || totalMoney==0) break;

                me = master;
            }
        }

        int[] answer = new int[len];

        for(int i=0;i<len;i++){
            answer[i] = money.getOrDefault(enroll[i], 0);
        }

        return answer;
    }
}

 

TIL

  • 반복문을 빠져나오는 조건을 다시 한번 확인하자.
  • 단순구현에서 흐름을 잘 파악해야 한다.
반응형
Comments