Skip to content

Commit c2e5b35

Browse files
committed
fix: 다단계 칫솔/jujoo.py
1 parent a575f9b commit c2e5b35

File tree

2 files changed

+33
-25
lines changed

2 files changed

+33
-25
lines changed

[211122] 다단계 칫솔/jujoo.py

+16-25
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,17 @@
1+
class Sell:
2+
def __init__(self, enroll, referral, seller, amount):
3+
self.answer = [0] * len(enroll)
4+
self.referral = referral
5+
self.enroll_idx = {val : idx for idx, val in enumerate(enroll)}
6+
for cur_seller, cur_amount in zip(seller, amount):
7+
self.dfs(cur_seller, cur_amount * 100)
8+
def dfs(self, cur_seller, cur_amount):
9+
if cur_amount < 1 or cur_seller == '-':
10+
return
11+
cur_idx = self.enroll_idx[cur_seller]
12+
self.answer[cur_idx] += cur_amount - int(cur_amount * 0.1)
13+
self.dfs(self.referral[cur_idx], int(cur_amount * 0.1))
14+
115
def solution(enroll, referral, seller, amount):
2-
loc_data = {node : idx for idx, node in enumerate(enroll)}
3-
result = [0] * len(enroll)
4-
5-
root_list = []
6-
for leaf in seller:
7-
tmp = [leaf]
8-
cur_idx = loc_data[leaf]
9-
while referral[cur_idx] != '-':
10-
tmp.append(referral[cur_idx])
11-
cur_idx = loc_data[referral[cur_idx]]
12-
tmp.append('center')
13-
root_list.append(tmp)
14-
15-
for idx, price in enumerate(amount):
16-
price *= 100
17-
cur_root = root_list[idx]
18-
for node in cur_root[:-1]:
19-
price_10 = int(price * 0.1)
20-
result[loc_data[node]] += price - price_10
21-
if price_10 < 1:
22-
break
23-
price = price_10
24-
return result
25-
26-
16+
sell = Sell(enroll, referral, seller, amount)
17+
return sell.answer
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
def solution(numbers):
2+
answer = []
3+
for number in numbers:
4+
bin_number = str(bin(number)[2:])
5+
if bin_number[-2:] in ['00', '10', '01'] or number in [0, 1]:
6+
answer.append(number + 1)
7+
else:
8+
# reversed(range(2, len(bin_number) + 1)) = [3, 2]
9+
for i in reversed(range(2, len(bin_number) + 1)):
10+
# i = 3, number = 7
11+
# bin_number[-i:] = 111
12+
if '0' not in bin_number[-i:]:
13+
answer.append(number + 2**(i - 1))
14+
break
15+
return answer
16+
17+
print(solution([0, 555, 123, 100000, 99999, 1000000000, 999999999999, 10**15, 10**15 -1]))

0 commit comments

Comments
 (0)