-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโll occasionally send you account related emails.
Already on GitHub? Sign in to your account
26-9kyo-hwang #104
26-9kyo-hwang #104
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
๋๋ถ์ ์ ๋ง ๊ณ ๋ฏผ, ์ฝ์ง ๋ง์ดํ๊ณ ์
๋์ ํ ์๋๋ค ์ถ์ด์ PR ๋ดค์๋๋ค.
PR์ ๋ณด๋๊น ์ ๊ฐ ์ฐฉ๊ฐํ๊ณ ์๋ค ๋ถ๋ถ์ด
์ ๋
๊ทธ๊ฑธ ๊ฐ๊ณผํ๊ณ 252๊ฐ์ ๊ฒฝ์ฐ๊ฐ ์๋ค๊ณ ํ์ ๋,
A
๊บผ 1๊ฐ ์ ์ธํ๊ณ B
๊ฐ 251๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ์ ํํ ์ ์๋ค๊ณ ์ฐฉ๊ฐํด์ ๊ณ์
๐๐๐๐๐๐
๋๋ฌด ์ฐ๋งคํ์ต๋๋ค..
์ ๋ PR์ฒ๋ผ ์ ๊ทผ์ ํ ๋ ค๊ณ ํ์๋๋ฐ,
์ ๋ถ๋ถ์์ ๊ฐ์ฅ worst ์ผ์ด์ค ์ผ ๊ฒฝ์ฐ,
๊ทธ๋ฌ๋ฉด
ํน์ ์ ๊ฐ ์ฐฉ๊ฐํ๊ณ ์๋ ๋ถ๋ถ์ด ์์ผ๋ฉด ์ฐ์ด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
์ด ๋ถ๋ถ์ด ์ ์ดํด๊ฐ ์ ๋์ด์.................. ์ด๋ป๊ฒ ์ฐ๋๊ฑฐ์ฃ |
1๋ฒ ํ
์คํธ ์ผ์ด์ค ๊ธฐ์ค์ผ๋ก, A๊ฐ 1๋ฒ/2๋ฒ ์ฃผ์ฌ์๋ฅผ ๊ฐ์ ธ๊ฐ๊ณ B๊ฐ 3๋ฒ/4๋ฒ ์ฃผ์ฌ์๋ฅผ ๊ฐ์ ธ๊ฐ์ ๋ ๋๊ธ์
๋ง ๊ทธ๋๋ ๋ชจ๋ ๋ ์กฐํฉ์ ๋ํ ํฉ์ด ๋ค ๋ค์ด๊ฐ์๋ 1์ฐจ์ ๋ฆฌ์คํธ์. ์ด์ ๊ฐ A ์์ x์ ๋ํด B_list์์ x๋ณด๋ค ํฐ ๊ฐ์๋ฅผ ๋ชจ๋ ๋ํ๋ฉด ๋๋๋ฐ, win_cnt: int = 0
for A_combo_sum in A_list:
win_cnt += bisect_left(B_list, A_combo_sum) ์ด๋ฅผ bisect_left๋ผ๋ ์ด์งํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด ํจ์๋ฅผ ์ด์ฉํด ์์น๋ฅผ ์ฐพ์๋. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
๋ญ๊ฐ ์ฝ๋ ์ง๋ ค๊ณ ํ๋๊น ๊ฐ ์ฃผ์ฌ์ ๋์ ํฉ์์๋ถํฐ ์๊ฐ ํฐ์ง๋ ๋ฐฉ๋ฒ๋ฐ์ ์๊ฐ ์ ๋์ ์ด์ฉ์งํ๋ค๊ฐ ๊ฒฐ๊ตญ PR์ ๋ดค์ต๋๋ค...
PR์ ๋ณด๊ณ ๋์์ผ ํ๋๋์ฉ ์ดํด๊ฐ๋ค์...
์ฝ๋ ์ฝ๋ค๊ฐ ๋ญ๊ฐ ์๊ฐ์ ์ค์ผ ์ ์๋ ๋ฐฉ๋ฒ์ด ์ด๊ฒ์ ๊ฒ ์๊ฐ๋์ ํ์ด์ฌ ์ฝ๋๋ฅผ ๊ทธ๋๋ก ๋ค๊ณ ๊ฐ์ ์ด๊ฒ์ ๊ฒ ์คํํ์ต๋๋ค
๊ฒฐ๋ก ์ ์ผ๋ก... ๊ฝค๋ ์ฑ๊ณต์ ์ธ ๊ฒ ๊ฐ์์
๋์ ํฉ
๋ญ๊ฐ ์ค๊ฐ์ for ๋ฐ๋ณต๋ฌธ 2๋ฒ ์ฐ๋ ๋ถ๋ถ์ ๋์ ํฉ์ผ๋ก ํ๋ฉด ๋ ์๊ฐ์ด ์ ๊ฒ ๋ค์ง ์์๊นํด์ ์๋ํด๋ดค์ต๋๋ค.
B_combo
๋ฅผ ๋์ ํฉ์ ์ฌ์ฉํด์ ํน์ ๋์ ํฉ ์ดํ์ธ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
( ๋์ ํฉ์ผ๋ก ๋ง๋ค์ด ์ค ๊ฒฝ์ฐ์๋ ๊ตณ์ด ์ ๋ ฌ๋ ๋ฆฌ์คํธ์ผ ํ์๊ฐ ์์ด์ ๋์
๋๋ฆฌ๋ก ๋จ๊ฒจ๋์ต๋๋ค. )
A_combo_sum
์ด 5์ผ ๋, ๋์ ํฉ์ผ๋ก ๋ฏธ๋ฆฌ ๊ตฌํ 4 ์ดํ์ธ ์๋ฅผ ๋ฐ๋ก ๊ณฑํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ต๋๋ค.
from itertools import combinations, product
from collections import defaultdict, deque
def get_count_of_each_combo(dices, indices):
num_combos: Dict[int, int] = defaultdict(int)
for pips in product(range(6), repeat=len(indices)):
sum_combo: int = sum(dices[i][j] for i, j in zip(indices, pips))
num_combos[sum_combo] += 1
return num_combos
# ๋ฆฌ์คํธ ์ ๋ ฌ
def change_sort_list(combo):
return sorted(combo.items())
# ๋์ ํฉ์ผ๋ก ๋ง๋ค์ด์ฃผ๋ ํจ์
def make_prefix_sum(combo, cnt):
num_combos, limit = combo, max(combo.keys())
for i in range(2,cnt):
num_combos[i] += num_combos[i-1]
return num_combos
def solution(dice):
answer: List[int] = []
n: int = len(dice)
dice_indices: Set[int] = set(range(n))
max_win_cnt: int = 0
for A in combinations(range(n), n // 2):
B: Set[int] = dice_indices.difference(A)
# A๋ ์๋ ํ์์ ๋ฆฌ์คํธ๋ก, B๋ฅผ ๋์ ํฉ์ผ๋ก ๋ฐ๋๋ค.
A_combos: List[Tuple[int, int]] = change_sort_list(get_count_of_each_combo(dice, A))
B_combos: Dict[int, int] = make_prefix_sum(get_count_of_each_combo(dice, B), A_combos[-1][0])
win_cnt: int = 0
# ๋์ ํฉ ๊ฒฐ๊ณผ๋ฅผ ์ด์ฉํด์ ๋ฐ๋ก ์ ๊ทผํ๊ธฐ
for A_combo_sum, A_combo_cnt in A_combos:
win_cnt += A_combo_cnt * B_combos[A_combo_sum-1]
if win_cnt > max_win_cnt:
max_win_cnt = win_cnt
answer = A
return [i + 1 for i in answer]
์กฐํฉ์ ์ ๋ฐ
๊ทธ๋ฆฌ๊ณ combinations
์์ ์ ๋ฐ๋๊ฐ ๋๋ ์ธ๋ฑ์ค๋ ๊ฒฐ๊ณผ๋ค์ ์ผ๋ ฌ๋ก ๋์ดํ์ ๋, ์ค์์ ๊ธฐ์ค์ผ๋ก ๋ฐ๋ํธ์ ์์ต๋๋ค.
๋ฐ๋ผ์, ์ ๋ฐ๋ง ํ์ํด์ค๋ ์ถฉ๋ถํ ๊ฒฐ๊ณผ๋ฅผ ์ ์ ์๋ค๋ ์ ์ ์ด์ฉํ์ต๋๋ค!
( ์ถ๊ฐ๋ก B_win_cnt
๋ฅผ ๋ง๋ค์ด์ ๋ฌด์น๋ถ์ธ ๊ฒฝ์ฐ๋ฅผ ๋นผ๊ณ , ๋ง์ง๋ง์ A_win_cnt
๋ฅผ ๋นผ์คฌ์ต๋๋ค.
from itertools import combinations, product
from collections import defaultdict
def get_count_of_each_combo(dices, indices):
num_combos: Dict[int, int] = defaultdict(int)
for pips in product(range(6), repeat=len(indices)):
sum_combo: int = sum(dices[i][j] for i, j in zip(indices, pips))
num_combos[sum_combo] += 1
return sorted(num_combos.items())
def solution(dice):
answer: List[int] = []
n: int = len(dice)
dice_indices: Set[int] = set(range(n))
max_win_cnt: int = 0
for A in combinations(range(n), n // 2):
# ์ ๋ฐ์ด ์ง๋ ์์น์์ ๋ฐ๋ณต์ ์ค๋จ
if A[0]:
break
B: Set[int] = dice_indices.difference(A)
A_combos: List[Tuple[int, int]] = get_count_of_each_combo(dice, A)
B_combos: List[Tuple[int, int]] = get_count_of_each_combo(dice, B)
A_win_cnt: int = 0
# ์ฃผ์ฌ์๋ฅผ ๋์ ธ์ ๋์ฌ ์ ์๋ ์ด ๊ฒฝ์ฐ์ ์
B_win_cnt: int = 6**n
for A_combo_sum, A_combo_cnt in A_combos:
for B_combo_sum, B_combo_cnt in B_combos:
if B_combo_sum >= A_combo_sum:
# ๋ง์ฝ ๋ฌด์น๋ถ๋ผ๋ฉด B๊ฐ ์ด๊ธฐ๋ ๊ฒฝ์ฐ์์ ๋นผ์ค๋ค.
B_win_cnt -= (A_combo_cnt * B_combo_cnt) if B_combo_sum == A_combo_sum else 0
break
A_win_cnt += A_combo_cnt * B_combo_cnt
# ๋ง์ง๋ง์ผ๋ก A๊ฐ ์ด๊ธฐ๋ ๊ฒฝ์ฐ๋ฅผ ๋นผ์ค๋ค.
B_win_cnt -= A_win_cnt
# A์ ๊ฒฐ๊ณผ์ B์ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ ํ์ธํด์ค๋ค.
if A_win_cnt > max_win_cnt:
max_win_cnt = A_win_cnt
answer = A
if B_win_cnt > max_win_cnt:
max_win_cnt = B_win_cnt
answer = B
return [i + 1 for i in answer]
๋์ ํฉ + ์กฐํฉ์ ์ ๋ฐ
from itertools import combinations, product
from collections import defaultdict, deque
def get_count_of_each_combo(dices, indices):
num_combos: Dict[int, int] = defaultdict(int)
for pips in product(range(6), repeat=len(indices)):
sum_combo: int = sum(dices[i][j] for i, j in zip(indices, pips)) # i๋ฒ์งธ ์ฃผ์ฌ์ j๋ฒ์งธ ๋
num_combos[sum_combo] += 1
return num_combos
def change_sort_list(combo):
return sorted(combo.items())
def make_prefix_sum(combo, cnt):
num_combos, limit = combo, max(combo.keys())
for i in range(2,cnt+1):
num_combos[i] += num_combos[i-1]
return num_combos
def solution(dice):
answer: List[int] = []
n: int = len(dice)
dice_indices: Set[int] = set(range(n))
max_win_cnt: int = 0
for A in combinations(range(n), n // 2):
if A[0]:
break
B: Set[int] = dice_indices.difference(A)
A_combos: List[Tuple[int, int]] = change_sort_list(get_count_of_each_combo(dice, A))
B_combos: Dict[int, int] = make_prefix_sum(get_count_of_each_combo(dice, B), A_combos[-1][0])
A_win_cnt: int = 0
B_win_cnt: int = 6**n
for A_combo_sum, A_combo_cnt in A_combos:
A_win_cnt += A_combo_cnt * B_combos[A_combo_sum-1]
B_win_cnt -= A_combo_cnt * abs(B_combos[A_combo_sum] - B_combos[A_combo_sum-1])
B_win_cnt -= A_win_cnt
if A_win_cnt > max_win_cnt:
max_win_cnt = A_win_cnt
answer = A
if B_win_cnt > max_win_cnt:
max_win_cnt = B_win_cnt
answer = B
return [i + 1 for i in answer]
์ด์ฌํ ์น๊ณ ๋ฏ๊ณ ๋ง๋ณธ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทผ๋ฐ ๋์ ํฉ ์ฝ๋๋ ๋๋ฌด ๋ณต์กํด์ ธ์ ์คํ๋ ค ๋ณด๊ธฐ ์ ์ข์ ๊ฒ ๊ฐ๊ธฐ๋ ํ๋ค์... ๐ค
๊ตํฉ์ฟ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ํ๋ก๊ทธ๋๋จธ์ค ๋ ๋ฒจ 3 ๋ฌธ์ ๋ ์ฒ์ ๋ณด๋๋ฐ ๋์ด๋๊ฐ ์ ๋ง ์ฌ์
ํ๋ค์ ^-^
์ ๊ทผ๋ฒ ์์ฒด๋ฅผ ๋ ์ฌ๋ฆฌ๊ธฐ๊ฐ ์ฝ์ง ์์์ ์์ ๊ต์๋ถ๋ค์ PR์ ๋ณด๊ณ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ณต๋ถ๋ฅผ ํด๋ณผ ์ ์์์ต๋๋ค.
๋ค๋ค ์ด๋ป๊ฒ ๋ฌธ์ ์ ์ ๊ทผํ๊ณ ํด๊ฒฐํ๋์ง ์ฟ๋ณผ ์ ์์ด์ ์ ๋ง ์ ์ตํ๋ค์ :>
๋์๋์ ์๊ฐ ์ค์ด๊ธฐ ๊ณผ์ ๋ ์ธ์๊น์์ต๋๋ค ๋ถ๋ฝ๋ค์ ๐ญ
์ด์งํ์๊ณผ ์กฐํฉ ๋์ ํฉ์ ํ์ฉํ๋ ๊ฒ ์์ง ์ต์ํ์ง๊ฐ ์์๋ฐ ๊ณต๋ถ๋ฅผ ์กฐ๊ธ ๋ ๊น๊ฒ ํด๋ด์ผ๊ฒ ์ต๋๋ค
์ข์ ๋ฌธ์ ์บ์ฌํฉ๋๋ค ๐๐ก
์์ฐ ์ดํดํ์ต๋๋ค ๐ซก๐ซก๐ซก |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
from itertools import combinations, product
def get_dice_sum_list(dice, idxes):
sum_list = []
for sum_idxes in product(range(6), repeat=len(idxes)):
accumulate = 0
for pick_dice_idx, sum_idx in zip(idxes,sum_idxes):
accumulate += dice[pick_dice_idx][sum_idx]
sum_list.append(accumulate)
return sorted(sum_list)
def get_a_win_count(a_dice_sum_list, b_dice_sum_list):
total_win_count = 0
for a_element in a_dice_sum_list:
left, right = 0, len(a_dice_sum_list)
win_count = 0
while left+1 < right:
mid = (left+right)//2
if check(a_element, b_dice_sum_list[mid]):
left = mid
win_count = mid
else: right = mid
total_win_count += win_count+1
return total_win_count
def check(a,b):
if a>b: return True
return False
def solution(dice):
n = len(dice)
max_win_count = -1
max_win_indexes = []
for a_dice_idxes in combinations(range(n),n//2):
b_dice_idxes = []
for b_dice_idx in range(n):
if b_dice_idx in a_dice_idxes: continue
b_dice_idxes.append(b_dice_idx)
a_dice_sum_list = get_dice_sum_list(dice, a_dice_idxes)
b_dice_sum_list = get_dice_sum_list(dice, b_dice_idxes)
win_count = get_a_win_count(a_dice_sum_list, b_dice_sum_list)
if win_count > max_win_count:
max_win_count = win_count
max_win_indexes = a_dice_idxes
return list(map(lambda x : x+1,max_win_indexes))
dice = [[1, 2, 3, 4, 5, 6], [3, 3, 3, 3, 4, 4], [1, 3, 3, 4, 4, 4], [1, 1, 4, 4, 5, 5]]
print(solution(dice))
์์ด๊ณ ............
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
์ ๋ ํ๋ก๊ทธ๋๋จธ์ค ๋ ๋ฒจ 3 ๋ฌธ์ ๋ ์ฒ์ ๋ณด๋๋ฐ ์ ๋ง ์ ๋ง ์ฝ์ง ์์์ต๋๋ค...๐ญ๐ญ
๋ฌธ์ ๋ฅผ ์ดํดํ๊ณ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ๋ง ์๊ฐํด๋ด๋๋ฐ ํ๋ฃจ๊ฐ ๊ฑธ๋ ค์ ๊ฒฐ๊ตญ ๊ตํฉ๋์ PR์ ๋ณด๊ณ ์ฒ์ฒํ ์ฝ๋๋ฅผ ๋ฐ๋ผํ๋ฉด์ ์ดํดํ์ด์๐ฅน
๋๋ฌด๋๋ฌด ๋๋จํ์ ๊ฒ ๊ฐ์ต๋๋ค!๐
๋ ๋ค๋ฅธ ๋ถ๋ค์ ๋ฆฌ๋ทฐ๋ค ๋๋ถ์ ๋ฌธ์ ๋ฅผ ๋ ์๋ฒฝํ๊ฒ ์ดํดํ ์ ์์์ต๋๋ค!
์ด์ง ํ์์ด๋ ์กฐํฉ ๋์ ํฉ์ ํ์ฉํ๋ ๊ณผ์ ์ ์ฝ๋๋ฅผ ๋ฐ๋ผํ๋ฉด์ ์ง์ ๋ณผ ์ ์์ด์ ๋์ฑ ๋ ์ ์ตํ์ด์๐ ๋ค์์ ์ ๋ ํ๋ฒ ํ์ฉ์ ํด๋ณด๋๋ก ํด๋ณด๊ฒ ์ต๋๋ค!
์ ๋ง์ ๋ง ์๊ณ ํ์
จ์ด์๐
๐ ๋ฌธ์ ๋งํฌ
2024 KAKAO WINTER INTERSHIP ๋ฌธ์ 3: ์ฃผ์ฌ์ ๊ณ ๋ฅด๊ธฐ
โ๏ธ ์์๋ ์๊ฐ
2์๊ฐ + a?
โจ ์๋ ์ฝ๋
1. ์ดํด
n๊ฐ์ ์ฃผ์ฌ์๊ฐ ์ฃผ์ด์ง๋ค. ์ด๋ฅผ A, B๊ฐ ๊ฐ๊ฐ n/2๊ฐ์ฉ ๋๋ ๊ฐ๋๋ค. ๊ฐ๊ฐ์ ์ฃผ์ฌ์๋ฅผ ๋ชจ๋ ๊ตด๋ ค, ๋์จ ์๋ค์ ํฉํด ์ ์๋ฅผ ๋น๊ตํ๋ค. ๋ ์ค ํฐ ์ชฝ์ด ์น๋ฆฌํ๋ค. ์ด ๋ A๊ฐ ์น๋ฆฌํ ํ๋ฅ ์ด ๊ฐ์ฅ ๋์ ์ฃผ์ฌ์ ์กฐํฉ์ ์ฐพ์์ผ ํ๋ค.
๋ค์์ n = 4์ธ ์์์ด๋ค.
A๊ฐ ๊ฐ์ ธ๊ฐ๋ ์ฃผ์ฌ์ ์กฐํฉ์ ๋ฐ๋ผ, ์ฃผ์ฌ์๋ฅผ ๊ตด๋ฆฐ 1296๊ฐ์ง ๊ฒฝ์ฐ์ ์นํจ ๊ฒฐ๊ณผ๋ฅผ ์ธ์ด๋ณด๋ฉด ์๋ ํ์ ๊ฐ๋ค.
A๊ฐ ์น๋ฆฌํ ํ๋ฅ ์ด ๊ฐ์ฅ ๋์์ง๊ธฐ ์ํด์ ์ฃผ์ฌ์ 1๋ฒ๊ณผ 4๋ฒ์ ๊ฐ์ ธ๊ฐ์ผ ํ๋ค.
2. ์ค๋ช
๏ฟฝํฌ๊ฒ 2๊ฐ์ง๋ฅผ ํ์ธํด์ผ ํ๋ค. 1. A๊ฐ ๊ฐ์ ธ๊ฐ ์ฃผ์ฌ์ ์ ํ 2. ๊ฐ์ ธ๊ฐ ์ฃผ์ฌ์๋ฅผ ๊ตด๋ฆฐ ๊ฒฐ๊ณผ ์ธ๊ธฐ
1. A๊ฐ ๊ฐ์ ธ๊ฐ ์ฃผ์ฌ์ ์ ํ
์ฃผ์ด์ง๋ ์ฃผ์ฌ์ ๊ฐ์๊ฐ ์ต๋ 10๊ฐ๋ฐ์ ๋์ง ์๊ธฐ ๋๋ฌธ์, A๊ฐ ๊ฐ์ ธ๊ฐ ์ฃผ์ฌ์๋ฅผ ์ ํํ๋ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ์์ ํ์์ผ๋ก ์ฐพ๋๋ค.
n๊ฐ์ ์ฃผ์ฌ์ ์ค n/2๊ฐ์ ์ฃผ์ฌ์๋ฅผ ๊ณ ๋ฅด๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ์ฐพ๋ ๊ฒ์ธ๋ฐ, n์ด ์ต๋๊ฐ์ผ ๋ 10๊ฐ์ ์ฃผ์ฌ์ ์ค 5๊ฐ์ ์ฃผ์ฌ์๋ฅผ ๊ณ ๋ฅด๋ ๋ฐฉ๋ฒ์ ์๋ 252์ด๋ฏ๋ก ์ถฉ๋ถํ ๊ฐ๋ฅํ๋ค.
2. ๊ฐ์ ธ๊ฐ ์ฃผ์ฌ์๋ฅผ ๊ตด๋ฆฐ ๊ฒฐ๊ณผ ์ธ๊ธฐ
์ด ๋ถ๋ถ์ด ๋ฌธ์ ๋ค. ๊ฐ ์ฃผ์ฌ์๋ฅผ ๊ตด๋ฆฐ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ์๋ฎฌ๋ ์ด์ ํด A๊ฐ ์ด๊ธฐ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๊ณ ์ ํ๋ฉด 6^n์ด๋ฏ๋ก ์ต๋ 252 * 6^10 = 15,237,476,352๊ฐ์ง ๊ฒฝ์ฐ์ ์๊ฐ ๋์ค๋ฏ๋ก ํฐ์ง๋ค.
์ด ๋ถ๋ถ์ ์ด๋ป๊ฒ ํด๊ฒฐํด์ผ ํ ์ง ๊ฐ์ ๋ชป์ก์์ ์๊ฐ์ ์์ ๋ ๋ ค๋ฒ๋ ธ๊ณ ... ์ง๋ฌธํ๊ธฐ ๊ฒ์ํ์ ๊ธ์ ๋ณด๊ณ ๋์์ผ ํด๊ฒฐํ๋ค ํํ
๋ฐฉ๋ฒ์ A, B๋ฅผ ๊ฐ๊ฐ ์๋ฎฌ๋ ์ด์ ํ๋ ๊ฒ์ด๋ค.
๋จผ์ A์ ์ฃผ์ฌ์๋ฅผ ๊ตด๋ฆฐ ๊ฒฐ๊ณผ๋ง ์๋ฎฌ๋ ์ด์ ํด 6^(n/2) ๊ฐ์ง์ ๋ํด ์ฃผ์ฌ์ ๋์ ํฉ์ ์ ์ฅํด ๋๊ณ , ๋ง์ฐฌ๊ฐ์ง๋ก B์ ์ฃผ์ฌ์๋ฅผ ๊ตด๋ฆฐ ๊ฒฐ๊ณผ 6^(n/2) ๊ฐ์ง์ ๋ํด ์ฃผ์ฌ์ ๋์ ํฉ์ ์ ์ฅํด ๋๋ค.
indices๊ฐ A, B๊ฐ ๊ฐ๊ฐ ๊ณ ๋ฅธ ์ฃผ์ฌ์๋ค์ ๋ฒํธ๊ฐ ๋ด๊ธด ๋ฆฌ์คํธ์ด๋ค. itertools์ product๋ฅผ ์ด์ฉํด ์ฃผ์ฌ์ ๋(0 ~ 5) ์์ด์ ์์ฑํ๋ค.
indices์ pips๋ฅผ ๋์์ ์ํํด i๋ฒ์งธ ์ฃผ์ฌ์์ j๋ฒ์งธ ๋์ ๋ชจ๋ ๊ตฌํด ๊ทธ๊ฒ์ ํฉ์ dictionary์ countingํ๋ค.
๊ทธ๋ฌ๋ฉด num_combos๋ผ๋ ๋์ ๋๋ฆฌ์๋ ์ต์ข ์ ์ผ๋ก {ํฉ1: ๊ฐ์, ํฉ2: ๊ฐ์, ...}์ ๊ฐ์ด ์ ์ฅ๋๋ค.
1๋ฒ | [1, 2, 3, 4, 5, 6], 2๋ฒ | [3, 3, 3, 3, 4, 4] <- ์ด 2๊ฐ์ ์ฃผ์ฌ์๋ฅผ ๊ณจ๋๋ค๊ณ ํ๋ฉด {4: 4, 5: 6, 6: 6, 7: 6, 8: 6, 9: 6, 10: 2}๊ฐ ์ ์ฅ๋๋ค.
์ด๋ฅผ key, ์ฆ ํฉ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ ๋ฆฌ์คํธ๋ก ๋ฐํํ๋ค.
์ด๋ ๊ฒ A, B์ ๋ํด ๊ฐ๊ฐ ๋ฆฌ์คํธ๋ฅผ ๊ตฌํ๋ค๋ฉด, A๊ฐ ๊ฐ์ง ์ฃผ์ฌ์๋ก ๋ง๋ค์ด๋ผ ์ ์๋ ๊ฐ ํฉ x์ ๋ํด, x๋ณด๋ค ์์ B๊ฐ ๊ฐ์ง ์ฃผ์ฌ์๋ก ๋ง๋ค์ด๋ผ ์ ์๋ ๊ฐ ํฉ์ ๊ฐ์๋ฅผ ๋ชจ๋ ๊ตฌํ๋ฉด ๋๋ค.
๊ฐ ๋ฆฌ์คํธ์ ๊ธธ์ด๋ 6^(n/2) = m์ด๋ผ ํ ๋, ์ ๋ ฌ ๊ณผ์ ์ด ์์ผ๋ฏ๋ก ์๊ฐ๋ณต์ก๋๋$O(mlogm)$ ์ด๋ค. ์ต๋๋ n = 10์ผ ๋์ด๋ฏ๋ก 6^5 = 7,776์ด๊ณ , ์ด๋ ๊ฐ๋ฅํ ์ฃผ์ฌ์ ์กฐํฉ์ ์ต๋๊ฐ์ธ 252๋ฅผ ๊ณฑํด๋ ์ถฉ๋ถํ ๋น ๋ฅด๋ค.
3. ์ ์ฒด ์ฝ๋
๐ ์๋กญ๊ฒ ์๊ฒ๋ ๋ด์ฉ
์๊ธฐ ์ง์ ์ PR์ ์จ์ ์ค๋ช ์ด ๋ถ์คํ ์ ์ํดํด์ฃผ์ธ์... ใ
์ง๋ฌธ ๋จ๊ฒจ์ฃผ์๋ฉด ๋ถ๊ฐ ์ค๋ช ๊ณ ๋ด๋ฐฅ์ผ๋ก ๋๋ฆฌ๊ฒ ์ต๋๋ค.