ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ ๋ฌธ์ ๋งํฌ
https://school.programmers.co.kr/learn/courses/30/lessons/77486
๐ ํ์ด
๋งจ ๋ฐ๋จ์์๋ถํฐ ์์ต๊ธ์ ์์ชฝ์ผ๋ก ๋ถ๋ฐฐํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํ์ด์ผ ํ๋ค. sam์ ์์ต๊ธ์ค 10%๋ฅผ edward๋ก ์ฌ๋ฆฌ๊ณ ๋ค์ edward์์ ํด๋น ์์ต๊ธ์ mary๋ก ์ฌ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก mary์์ center๋ก ์ฌ๋ฆฐ๋ค.
1. ์ฐ์ ์์ต๊ธ์ ์ ์ฅํ๋ memberProfit๊ณผ ๋๊ตฌ๋ก๋ถํฐ ์ถ์ฒ์ ๋ฐ์๋์ง ์ฆ, ๋ถ๋ชจ ๋ ธ๋๋ฅผ ์ ์ฅํ๋ memberRecommender๋ฅผ ๋ง๋ ๋ค.
memberRecommender = dict() # ์ถ์ฒ์ธ dict์ ๋ฃ๊ณ
memberProfit = dict() # ์์ต๊ธ
for i in range(len(enroll)):
memberRecommender[enroll[i]] = referral[i]
memberProfit[enroll[i]] = 0
2. seller๋ฅผ ์ํํ๋ฉด์ ์์ต๊ธ์ ๋ฐฐ๋ถํ๋๋ฐ ์ฌ๊ธฐ์ DFS ๊ฐ๋ ์ ์ฌ์ฉํ๋ค. ๋ถ๋ชจ ๋ ธ๋๊ฐ '-'๊ฐ ์๋ ๋๊น์ง ์ฆ, center์ผ ๋๊น์ง ๋ฐ๋ณตํ๋ค. ์ฌ๊ธฐ์ ๋ถ๋ชจ๊ฐ '-'์ธ ๊ฒฝ์ฐ์๋ center๋ก ์์ต๊ธ์ ์ค์ผํ๋ฏ๋ก ์์ ์ ์์ต์์ ๋นผ์ค์ผํ๋ค.
for i in range(len(seller)):
cur = seller[i]
profit = amount[i]*100
memberProfit[cur] += amount[i]*100
while memberRecommender[cur] != '-': # ๋ถ๋ชจ ๋
ธ๋๊ฐ center์ด ์๋ ๋๊น์ง
if profit == 0: # ์ค์!!
break
profit = int(0.1*profit)
memberProfit[cur] -= profit # ํ์ฌ ๋
ธ๋์์ 0.1*์์ต๊ธ ๋นผ์ฃผ๊ณ
memberProfit[memberRecommender[cur]] += profit # ๋ถ๋ชจ๋
ธ๋์ ์์ต๊ธ์ ๋ํด์ค๋ค
cur = memberRecommender[cur] # ๊ทธ๋ฆฌ๊ณ ๋ค์ ๋ถ๋ชจ๋
ธ๋๋ฅผ ํ์ฌ ๋
ธ๋๋ก ๊ต์ฒดํด์ ๋ฐ๋ณต ์ํํ๋ค
if memberRecommender[cur] == '-': # ๋ถ๋ชจ๊ฐ center์ธ ๊ฒฝ์ฐ
memberProfit[cur] -= int(profit*0.1)
์ฌ๊ธฐ์ ์กฐ์ฌํด์ผํ ๊ฒ ์์ต์ด 0์์ด ๋ ๊ฒฝ์ฐ ๋์ด์ ๋ฐ๋ณต๋ฌธ์ ๋๋ฆด ํ์๊ฐ ์์ผ๋ฏ๋ก ์ข ๋ฃํด์ค๋ค. ํด๋น ์กฐ๊ฑด๋ฌธ ์์ผ๋ฉด ๋ง์ง๋ง 3๊ฐ ํ ์คํธ ์ผ์ด์ค์์ ์๊ฐ ์ด๊ณผ ๋ฐ์ํ๋ค.
๐ฅ ์ต์ข ์ฝ๋
"""
์ด๋์ ๋ ํ๋งค๊ฐ ์ด๋ฃจ์ด์ง ํ ๋๊ฐ ์ผ๋ง๋งํผ์ ์ด๋์ ๊ฐ์ ธ๊ฐ๋์ง
๋ฏผํธ -> center, 8๋ช
์ ํ๋งค์
๋ชจ๋ ํ๋งค์์ ์นซ์์ ํ๋งค์ ์ํ์ฌ ๋ฐ์ํ๋ ์ด์ต์์ 10%๋ฅผ ๊ณ์ฐํ์ฌ ์์ ์ ์กฐ์ง์ ์ฐธ์ฌ์ํจ ์ถ์ฒ์ธ์๊ฒ ๋ฐฐ๋ถํ๊ณ ๋๋จธ์ง ๊ฐ์ง
๋ชจ๋ ํ๋งค์์ ์์ ์ด ์นซ์ํ๋งค์์ ๋ฐ์ํ ์ด์ต๋ฟ๋ง์๋๋ผ ๊ฐ์
์ํจ ํ๋งค์ 10%๊น์ง ์๊ธฐ ์ด์ต
enroll -> ๋ฏผํธ๋ฅผ ์ ์ธํ ์กฐ์ง์
referral
i๋ฒ์งธ ์ด๋ฆ
"""
def solution(enroll, referral, seller, amount):
result = []
memberRecommender = dict() # ์ถ์ฒ์ธ dict์ ๋ฃ๊ณ
memberProfit = dict() # ์์ต๊ธ
for i in range(len(enroll)):
memberRecommender[enroll[i]] = referral[i]
memberProfit[enroll[i]] = 0
for i in range(len(seller)):
cur = seller[i]
profit = amount[i]*100
memberProfit[cur] += amount[i]*100
while memberRecommender[cur] != '-':
if profit == 0:
break
profit = int(0.1*profit)
memberProfit[cur] -= profit
memberProfit[memberRecommender[cur]] += profit
cur = memberRecommender[cur]
if memberRecommender[cur] == '-':
memberProfit[cur] -= int(profit*0.1)
for member in enroll:
result.append(memberProfit[member])
return result
'Algorithm > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] Lv3 ๊ธฐ๋ฅ๊ณผ ๋ณด ์ค์น (0) | 2023.01.14 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] Lv2 ํ ์ธ ํ์ฌ (0) | 2022.12.28 |
[ํ๋ก๊ทธ๋๋จธ์ค] Lv2 k์ง์์์ ์์ ๊ฐ์ ๊ตฌํ๊ธฐ (0) | 2022.12.24 |
- Total
- Today
- Yesterday
- apm
- springboot
- ์ฝ๋ฉํ ์คํธ
- Docker
- ์คํ๋ง๋ถํธ
- ํด๋ฆฐ์ฝ๋
- lombok
- jpa
- spring
- java
- jdbc
- ํ๋ก๊ทธ๋๋จธ์ค
- mysql
- ๋๊ท๋ชจํธ๋ํฝ
- ๊ตฌํ
- ์๊ณ ๋ฆฌ์ฆ
- ํ์ด์ฌ
- ๋ฐฑ์๋
- pinpoint
- ์๋ฐ
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |