https://school.programmers.co.kr/learn/courses/30/lessons/77486
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
코드 & 풀이
import java.util.*;
class Solution {
public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) {
int n = enroll.length;
Map<String, Integer> nameToIndex = new HashMap<>();
for (int i = 0; i < n; i++) {
nameToIndex.put(enroll[i], i);
}
int[] parent = new int[n];
for (int i = 0; i < n; i++) {
String cur_referral = referral[i];
if(cur_referral.equals("-")) {
parent[i] = -1;
} else {
parent[i] = nameToIndex.get(cur_referral);
}
}
int[] profit = new int[n];
for (int i = 0; i < seller.length; i++) {
String current_seller = seller[i];
int money = amount[i] * 100;
int current_idx = nameToIndex.get(current_seller);
while (current_idx != -1 && money > 0) {
int comition = money / 10;
int keep = money - comition;
profit[current_idx] += keep;
money = comition;
current_idx = parent[current_idx];
}
}
return profit;
}
}
판매원을 이름을 기준으로 index를 맵핑해줍니다.
그리고 판매인 별 추천인의 인덱스를 기록해줍니다.
이로 인해서 누가 누구의 추천인인지를 알 수 있게 됩니다.
그러면 이제 돈계산에 들어갑시다.
현재 seller를 기준으로
최상위인 회사. 즉, "-"을 나타내는 인덱스 -1이 올 때까지, 그리고 돈이 0원 이상일 때까지 반복문을 돌립니다.
현재 seller에게 남는 돈은
자신의 추천인에게 번 돈에서 comition(10퍼센트)을 주고 남은 돈입니다.
= money - (money / 10)
그리고 추천인에게는 comition이 남게 되고,
그 추천인은 parent[current_idx] 이죠.
이렇게 반복되다보면 모든 계산을 완료할 수 있습니다.
728x90
'프로그래머스 > Lv.3' 카테고리의 다른 글
아이템 줍기 - JAVA, BFS (1) | 2025.06.02 |
---|---|
단어 변환 - JAVA, BFS, Queue (0) | 2025.06.01 |
순위 - JAVA, 플로이드 워셜, BFS (1) | 2025.05.22 |
가장 먼 노드 - Java, Graph, BFS (2) | 2025.05.21 |
입국심사 - Python, 이진탐색 (0) | 2025.04.06 |