Lv 3. 다단계 칫솔 판매

2024. 11. 28. 12:36·Algorithm & Data Structures/Programers

 

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

 

다단계 판매 구조에서 각 판매원이 얻은 수익을 계산하는 문제다.
판매원의 추천 관계를 기반으로 수익을 배분하며,
일정 비율의 수익은 상위 추천인에게 전달되고 나머지는 자신이 보유하게 된다.

solution 메서드는 먼저 판매원과 추천인의 관계를 relation 맵에 저장하고,
각 판매원의 초기 수익을 0으로 설정한다.
추천인이 없는 경우 center로 설정해 루트 노드를 명시한다.

이후 판매원들의 판매 정보를 순회하며,
각 판매원의 수익을 계산하기 위해 distribute 메서드를 호출한다.

distribute 메서드는 현재 판매원의 수익을 계산하고,
그중 10%는 추천인에게 전달하며 나머지는 자신이 가져간다.
추천인이 center에 도달하거나,
분배 금액이 0이 되면 분배를 중단한다.
추천인이 있다면 재귀적으로 상위 추천인에게 수익을 전달한다.

최종적으로, 각 판매원의 이름 순서에 따라 수익을 배열로 반환한다.
재귀적으로 수익을 분배하는 형식으로 구현하였으며,
모든 판매원의 수익을 계산하였다.

 

 

 

import java.util.*;

class Solution {
    Map<String,String> relation;
    Map<String,Integer> money;
    
    void distribute(String name, int profit){
        int commission = profit/10;
        String next = relation.get(name);
        money.put(name,money.get(name)+(profit-commission));
        if(commission == 0 || next.equals("center"))
            return ;
        distribute(next,commission);
        
    }
    public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) {
        int[] answer = {};
        relation = new HashMap<>();
        money = new HashMap<>();
        money.put("center",0);

        //관계저장, 이익 초기화
        for(int i = 0 ; i < enroll.length ; i++){
            money.put(enroll[i],0);
            if(referral[i].equals("-")){
                relation.put(enroll[i],"center");
                continue;
            }
            relation.put(enroll[i],referral[i]);
        }
    
        for(int i = 0 ; i < seller.length; i++)
            distribute(seller[i],amount[i]*100);
        
        
        return Arrays.stream(enroll)
            .mapToInt(a->money.get(a))
            .toArray();
    }
}

'Algorithm & Data Structures > Programers' 카테고리의 다른 글

Lv 3. 풍선 터트리기  (1) 2024.12.04
Lv 3. 거스름돈  (0) 2024.12.02
Lv 3. [1차] 셔틀버스  (0) 2024.11.26
Lv 3. 가장 긴 펠린드롬  (3) 2024.11.21
Lv 3. 부대복귀  (0) 2024.11.19
'Algorithm & Data Structures/Programers' 카테고리의 다른 글
  • Lv 3. 풍선 터트리기
  • Lv 3. 거스름돈
  • Lv 3. [1차] 셔틀버스
  • Lv 3. 가장 긴 펠린드롬
Geisha
Geisha
개발 일기
  • Geisha
    Geisha
    Geisha
  • 전체
    오늘
    어제
    • 분류 전체보기 (315) N
      • Algorithm & Data Structures (237) N
        • BOJ (95) N
        • SWEA (1)
        • Programers (137)
        • Data Structures (3)
      • DB (25)
        • SQL (19)
        • RDBMS (2)
      • Java (1)
        • Class (1)
      • Spring (5)
        • Spring MVC (1)
        • Annotations (1)
      • CS (36)
        • 운영체제 (13)
        • 네트워크 (5)
      • Tool (6)
        • Git (5)
        • AWS (1)
      • Project (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Java
    algorithm
    경로압축
    BFS
    후위순회
    이분탐색
    프로그래머스
    백트래킹
    다익스트라
    binarySearch
    백준
    dp
    unionfind
    dfs
    baekjoon
    구현
    골드
    투포인터
    SQL
    Stack
    programmers
    Union-Find
    전위순회
    유니온파인드
    PriorityQueue
    동적계획법
    알고리즘
    스택
    Dijkstra
    DynamicProgramming
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Geisha
Lv 3. 다단계 칫솔 판매
상단으로

티스토리툴바