프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 핵심
본인 판매금액의 10%는 위로 올린다.
위 그림과 아래 표를 예시로 보면
young은 1,200원을 벌었다.
그러면 young의 부모는 edward이므로, young이 번 1,200원의 10%인
120원을 edward에 상납한다
그리고 또 edward는 그 120원의 10%인 12원을 mary에 상납
그리고 또 mary는 그 12원의 10%인 1.2원(1원단위만) 1원을 center에 상납
Young | edward | mary | center | |
이익금 | 1,200원 | 120원 | 12원 | 1원 |
실제 이익 | 1,080원 | 108원 | 11원 | - |
이와 같은 구조로 되어있다.
입출력 예시
enroll | referral | seller | amount | result |
["john", "mary", "edward", "sam", "emily", "jaimie", "tod", "young"] | ["-", "-", "mary", "edward", "mary", "mary", "jaimie", "edward"] | ["young", "john", "tod", "emily", "mary"] | [12, 4, 2, 5, 10] | [360, 958, 108, 0, 450, 18, 180, 1080] |
["john", "mary", "edward", "sam", "emily", "jaimie", "tod", "young"] | ["-", "-", "mary", "edward", "mary", "mary", "jaimie", "edward"] | ["sam", "emily", "jaimie", "edward"] | [2, 3, 5, 4] | [0, 110, 378, 180, 270, 450, 0, 0] |
코드
def solution(enroll, referral, seller, amount):
#부모 자식 관계 정리 dict={ 자식 : 부모 }
parent = dict(zip(enroll,referral))
'''
parent는 아래와 같은 딕셔너리
{
'john': '-', john → -(민호)
'mary': '-',
'edward': 'mary',
'sam': 'edward', sam → edward → mary → - (민호)
'emily': 'mary', emily → mary → - (민호)
'jaimie': 'mary', jaimie → mary → - (민호)
'tod': 'jaimie', tod → jaimie → mary → - (민호)
'young': 'edward' young → edward → mary → - (민호)
}
'''
#출력 형태 dict 생성 및 초기화
#이렇게 초기화를 해놔야 구현이 편하다는 걸 이때 알았다.
total = {name:0 for name in enroll}
#print(total)
for i in range(len(seller)):
#
money = amount[i] * 100
cur_name = seller[i]
#핵심
while money>0 and cur_name !="-":
'''
1. young → edward → mary → - (민호)
2. john → -(민호)
3. tod → jaimie → mary → - (민호)
'''
#최종 결과 dict에 10프로 제외한 금액만큼 더함
#0으로 초기화 했기 때문에 값이 있는지 없는지 체크 안해도됨
total[cur_name] += (money- money//10)
#현재 이름을 부모로 change , 트리 구조상 위로 올라가는 추상화
cur_name = parent[cur_name]
#money는 10프로로 줄임
money//=10
#위로 올라가는 개념
return [total[name] for name in enroll]
'프로그래밍 이야기 > 파이썬 코딩 테스트 스터디' 카테고리의 다른 글
파이썬 코딩테스트 스터디 7주차 #2 - 몸풀기 문제 : 간단한 유니온 - 파인드 알고리즘 구현하기 (0) | 2024.08.09 |
---|---|
파이썬 코딩테스트 스터디 7주차 #1 - 집합 (0) | 2024.08.04 |
파이썬 코딩테스트 스터디 6주차 #4 - 예상대진표 (3) | 2024.07.23 |
파이썬 코딩테스트 스터디 6주차 #3 - 이진 탐색 트리 구현 (1) | 2024.07.22 |
파이썬 코딩테스트 스터디 6주차 #2 - 몸풀기 문제 - 트리 순회 (0) | 2024.07.21 |