https://school.programmers.co.kr/learn/courses/30/lessons/77486
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
프로그래머스 - 다단계 칫솔 판매 (77486번)
난이도 : Lv 3
알고리즘&자료구조 : Tree (트리)
def solution(enroll, referral, seller, amount):
mapping = {name: i for i, name in enumerate(enroll)}
seller = [mapping[name] for name in seller]
referral = [mapping[name] if name != '-' else -1 for name in referral]
answer = [0] * len(enroll)
for name, sell in zip(seller, map(lambda x: x*100, amount)):
while name != -1 and sell:
sell, r = divmod(sell, 10)
answer[name] += sell*9 + r
name = referral[name]
return answer
2021 Dev-Matching: 웹 백엔드 개발자(상반기) 기출문제이다.
영어 소문자로 구성된 이름들을, enroll 기준으로 숫자 index로 바꿔준다.
enroll 을 자식 노드의 집합, referral 을 부모 노드의 집합이라고 볼 수 있다.
칫솔 하나당 100원이므로, amount 의 모든 원소에 각각 100을 곱한다.
seller 의 각 원소에 대해서,
while 문을 통해 각각의 단계에서 10%씩 떼서 부모 노드로 올라가고,
나머지 90%와 10으로 나눈 나머지는, 현재 노드의 누적 이익금에 더해준다.
만약 현재 노드가 "center" 이거나, 10% 뗀 금액이 0원이 되면, while 문을 중단한다.
이렇게 모든 seller 의 원소들을 for 문을 통해 순회하고 나면,
각 판매원의 최종 누적 이익금이 answer에 기록되고, 이것을 출력하면 된다.
'Algorithm' 카테고리의 다른 글
기둥과 보 설치 (60061번) - 프로그래머스 (Programmers) (0) | 2023.06.29 |
---|---|
이분 그래프 (1707번) - 백준 (BOJ) (0) | 2023.06.28 |
수 묶기 (1744번) - 백준 (BOJ) (0) | 2023.06.26 |
행렬 테두리 회전하기 (77485번) - 프로그래머스 (Programmers) (0) | 2023.06.25 |
Moo 게임 (5904번) - 백준 (BOJ) (0) | 2023.06.24 |