꾸물꾸물 졔의 개발공부
[프로그래머스] 다단계 칫솔 판매 - JAVA (2021 Dev-Matching: 웹 백엔드 개발자(상반기)) 본문
https://school.programmers.co.kr/learn/courses/30/lessons/77486
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
알고리즘
- 특별한 알고리즘을 사용하지 않고 문제 그대로 구현하면 쉽게 풀 수 있었다 !
- seller의 추천인을 찾거나, answer에 각 판매원별로 득한 이익금을 저장하는 과정에서 배열에 접근하는 인덱스를 관리하기 위해 해시맵에 (이름-인덱스번호) 를 저장하였다.
구현 과정
- Map<String, Integer> map : enroll[] 에 입력된 순서대로 (이름 - 배열 인덱스 번호 저장)
1. 입력으로 주어진 enroll에 이름이 포함된 순서에 따라 해시맵에 (이름 - 배열 번호) 를 저장한다.
2. 각 판매원(name) , 판매금액(price)에 따라 아래 과정을 반복한다.
- reco_name: 판매원의 추천인, map에서 판매원의 인덱스번호를 찾아 referral 배열에서 찾는다.
- up_price: 추천인에게 배분할 금액, 판매금액의 10%. 단, up_price 가 1 미만일 경우 0으로 간주한다.
- (price - up_price) 의 금액(=90%)을 현재 판매원의 이익금 배열 answer에 누적시킨다.
👉 up_price가 1 미만으로 0일 경우에는 90%가 아닌 전체 금액이 더해진다. - 만약 추천인이 "-" 라면, center 이므로 반복을 종료한다. (center는 이익금 계산할 필요 x)
- 다단계 조직의 다음 반복을 위해 name = reco_name , price = up_price 하여 상위 과정을 반복한다.
- price 가 0 이하라면, 반복문을 종료한다.
3. answer 배열 리턴
소스 코드
import java.util.*;
class Solution {
public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) {
Map<String, Integer> map = new HashMap<>(); //이름, 배열 인덱스번호
for(int i=0; i<enroll.length; i++){
map.put(enroll[i], i);
}
int[] answer = new int[enroll.length];
for(int i=0; i<seller.length; i++){
String name= seller[i];
int price = amount[i] * 100; //name이 얻은 수익
while(price > 0){
//name의 추천인
String reco_name = referral[map.get(name)];
//추천인에게 넘어갈 금액
int up_price = (int)(price * 0.1);
if(up_price < 1) up_price =0;
answer[map.get(name)] += (price-up_price);
//추천인이 없을경우
if(reco_name.equals("-")) break;
name = reco_name;
price = up_price;
}
}
return answer;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 개인정보 수집 유효기간 - JAVA (2023 KAKAO BLIND RECRUITMENT) (0) | 2023.09.01 |
---|---|
[프로그래머스] 등산코스 정하기 - JAVA (2022 KAKAO TECH INTERNSHIP) (0) | 2023.08.22 |
[프로그래머스] 로또의 최고 순위와 최저 순위 - JAVA (2021 Dev-Matching: 웹 백엔드 개발자(상반기) Lv.1) (0) | 2023.06.19 |
[프로그래머스] 코딩 테스트 공부 - JAVA (0) | 2023.05.09 |
[프로그래머스] 두 큐 합 같게 만들기 - JAVA (0) | 2023.05.03 |