๋ฐ์ํ
๋ฐฑํธ๋ํน์ ์ด์ฉํ ํด์ ํ์๊ณผ ๊ทธ ์ค์
- ์กฐํฉ ๋ฐ ์์ด ๋ฌธ์ : ์๋ก ๋ค๋ฅธ ์์๋ค์ ๋ชจ๋ ์กฐํฉ์ด๋ ์์ด์ ์์ฑํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- N-Queens ๋ฌธ์ : N×N ์ฒด์คํ ์์ N๊ฐ์ ํธ์ ์๋ก ๊ณต๊ฒฉํ ์ ์๊ฒ ๋ฐฐ์นํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- ์๋์ฟ : ์ฃผ์ด์ง ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์๋์ฟ ๋ณด๋๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ๊ทธ๋ํ ์์น ๋ฌธ์ : ๊ทธ๋ํ์ ์ ์ ์ ์ต์ํ์ ์์์ผ๋ก ์์น ํ๋ ๋ฐฉ๋ฒ์ ์ฐพ๋ ๋ฌธ์ ํด๊ฒฐ์ ์ฌ์ฉ๋ฉ๋๋ค.
๋ฐฑํธ๋ํน๊ณผ ํจ์จ์ ํด ํ์
Q - ์ฌ์ฏ ๋ช ์ ์ค๋ณต ์์ด ํ ๋ช ์ฉ ๋์ดํ๋ ๊ฒฝ์ฐ๋ฅผ ๋ชจ๋ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ?
→ 6^6 ์ค, ์ค๋ณต๋์ง ์๋ ๊ฒฝ์ฐ๋ง ์ถ์ถํด ๋์ด vs ์ค๋ณต๋ ์๋ฅผ ์ ์ธํ๋ฉด์ ๋์ด
Backtracking
- ๊ฐ๋ฅํ ๋ชจ๋ ํด๋ฅผ ํ์, ์กฐ๊ฑด์ ์ด๊ธ๋๋ ๊ฒฝ์ฐ ์ด์ ์ผ๋ก ๋์๊ฐ๋ ๊ธฐ๋ฒ
- ์ด๋ค ์ง์ ์ด ํด์ ์กฐ๊ฑด์ ์๋ฐฐ → ๊ทธ ๊ฒฝ์ฐ๋ฅผ ์ ์ธ
- ์์ ํ์ ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค ํจ์จ์ ์ธ ์ฑ๋ฅ ๊ธฐ๋ ๊ฐ๋ฅ
- Tree์์ ‘๊น์ด ์ฐ์ ํ์’์ ๊น์ ๊ด๋ จ์ด ์์
member = ['Rei', 'Gaeul', 'Leeseo', 'Liz']
line = list()
for i in range(0, len(member)):
line.append('')
def line_up(num):
if (check(num)):
if (num == len(member)):
print(line)
else:
for i in range(0, len(member)):
line[num] = member[i]
line_up(num + 1)
def check(num):
if num == 0:
return True
target = line[num - 1]
for each_member in line[0:(num - 1)]:
if (each_member == target):
return False
return True
line_up(0)
N-Queen ๋ฌธ์ ์ ๋ฐฑํธ๋ํน
Q - NxN ์ฒด์คํ ๊ตฌ์กฐ์์ ๋๊ฐ์ ์ผ๋ก ๊ฒน์น์ง ์๋๋ก ํ๋ ํ๋ก๊ทธ๋จ?
N = 4
spr = list()
for i in range(0, N):
spr.append(-1)
def spr_up(num):
if (check(num)):
if (num == N):
print(spr)
else:
for i in range(0, N):
spr[num] = i
spr_up(num + 1)
def check(num):
for k in range(0, num - 1):
if (spr[num-1] == spr[k]):
return False
elif (abs(spr[num-1] - spr[k]) == (num - 1 - k)):
return False
return True
์กฐํฉ์์์ ๋ฐฑํธ๋ํน ์์ฉ
Q - ๋ธ๋์ญ ๊ฒ์
card = [3, 7, 9, 5, 1, 8, 4]
target = 21
def blackjack(num, choose):
if (check(choose) == 'UNDER'):
if (num < len(card)):
blackjack(num + 1, choose)
blackjack(num + 1, choose + [card[num]])
elif (check(choose) == 'BLACKJACK'):
print(choose)
def check(choose):
if (sum(choose) < traget):
return 'UNDER'
elif (sum(choose) == traget):
return 'BLACKJACK'
else:
return 'OVER'
blackjack(0, list())
Python์์์ ์์ด๊ณผ ์กฐํฉ
itertools๋ฅผ ์ด์ฉํ ์์ด์ ๊ตฌ์ฑ
from itertools import permutations
member = ['Rei', 'Gaeul', 'Leeseo', 'Liz', 'Yujin', 'Wonyoung']
for each_p in permutations(member, 6):
print(each_p)
itertools๋ฅผ ์ด์ฉํ ์กฐํฉ์ ๊ตฌ์ฑ
from itertools import combinations
card = [3, 7, 9, 5, 1, 8, 4]
for each_c in combinations(card, 5):
print(each_c)
๋ฐ์ํ