algorithm
์์ด๊ณผ ์กฐํฉ๐ช
์ํ์ด0812
2023. 9. 20. 02:17
728x90
๋ฐ์ํ
์ ํ๋ฒ ๋ฉ์ฝ๋ฉ์จ ๋ณด๊ณ ์ ๋ฆฌํด๋ณด๋ ์์ด๊ณผ ์กฐํฉ...
์ฌ๊ท, ๋ฐฑํธ๋ํน, dfs... ๋ฑ๋ฑ ์ ๋ง ๋ง์ด ์ฐ๊ด๋์ด์์ด์ ์ ๋ฆฌํ๋ฉด ์ข์๊ฒ ๊ฐ์ ์ฌ๋ ค๋ด ๋๋ค...
##### permutation(์์ด)
'''
์์ด : permutation(ํฌํจ๋์ด ์๋ ์๊ฐ ๊ฐ์ ์์ฌ๋ ์์๊ฐ ๋ค๋ฅด๋ฉด ๋ค๋ฅธ๊ฑธ๋ก ์น๋ค)
dfs ํธ๋ฆฌ์ ์ฒดํฌ๋ฆฌ์คํธ ์ฌ์ฉ
3๊ฐ์ ๊ณต ์ค์ 2๊ฐ๋ฅผ ๋ฝ๋ ๊ฒฝ์ฐ(3P2)
์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฃ์ผ๋ฉด ์๋๋ฏ๋ก ์ฒดํฌ๋ฆฌ์คํธ ์ฌ์ฉํ๋ ๊ฒ์....
๊น์ด + 1 ํํ ๊ธธ์ด์ ๋ง๋ ๊ฐ์ ๋ฆฌํด์ ํ๊ณ ๋๋ฉด
๋ค์ ์ฒดํฌ๋ฆฌ์คํธ์ ๋นผ์ค์ ๋ค์ ๋ฃ์ ์ ์๋๋ก ํด์ค๋ค..
1 2
1 3
2 1
2 3
3 1
3 2
6๊ฐ์ง
'''
def dfs(L):
# ์ข
๋ฃ ์กฐ๊ฑด
# ๋ฆฌ์คํธ์ ๊ธธ์ด๊ฐ ์ฐพ์์ผ ํ ๊ฐ์(r)๊ฐ ๋๋ค๋ฉด ์ข
๋ฃ
if L == r:
print(result)
else:
for i in range(len(n)):
# ์ฒดํฌ๋ฆฌ์คํธ์ ํด๋นํ๋ ๊ฐ์ด ์๋ค๋ฉด
if checklist[i] == 0:
# result ๋ฆฌ์คํธ์ ๊ฐ์ ์ถ๊ฐ
result[L] = n[i]
# ์ฒดํฌ๋ฆฌ์คํธ์ ๊ฐ์ด ์๊ฒผ๋ค๊ณ ํ์ํด์ฃผ๊ธฐ
checklist[i] = 1
# ๋ค์ ๊น์ด๋ก ์ด๋
dfs(L+1)
# ๋ค์ ๋ฒ์ ๋ค์ ์ฌ์ฉํ๊ธฐ ์ํด์ ๋นผ์ค๋ค๊ณ ๊ทธ๋ฅ ์๊ฐํ์
^^;;;
checklist[i] = 0
n = [1, 2, 3]
r = 2
result = [0] * r
checklist = [0] * len(n)
dfs(0)
์ดํด๋ ์ดํด์ง๋ง ์ด๋์ ๋ ์ธ์ธ๋งํผ์ ์ธ์ฐ๋ผ๊ณ ํ์ฌ...
์ดํดํด์ผ ์ธ์ฐ์ง ์ถ๋ค๊ฐ๋ ์ด๋ฌ๋ค๊ฐ ์ง๋๊ฐ ์ ์๋๊ฐ๊ฑฐ ๊ฐ์์ ์ ๋นํ ์ดํด์์ผ์ ์ธ์ฐ๋๊ฒ์ด ์ข์ ๋ฏ...
'''
์กฐํฉ : ๊ฐ์ ์ซ์๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด ๊ฐ์ ๊ฑธ๋ก ์ธ์ ....
์์ด๋ณด๋ค ๊ฒฝ์ฐ์ ์๊ฐ ํจ์ฌ ์์...
์์ด๋ณด๋ค ๋ ๊ฐ๋จ...
ํ๋ฒ ์ผ์ผ๋ฉด ๋ค์ ์ฐ์ง๋ฅผ ์์ผ๋๊น ์ฒดํฌ๋ฆฌ์คํธ๋ ํ์์์...
DFS ํธ๋ฆฌ๋ฅผ ์ด์ฉํด์ ํผ๋ค
3C2
1 2
1 3
2 3
3๊ฐ์ง
'''
def dfs(L, BeginWith):
# ์ข
๋ฃ ์กฐ๊ฑด
if L == r:
print(*result)
else:
for i in range(BeginWith, len(n)): # ์์ํ๋ ๊ฐ๋ถํฐ ๋๊น์ง
result[L] = n[i] # ํด๋นํ๋ ๊ฐ์ ๋ฃ์ด์ฃผ๊ธฐ
dfs(L+1, i+1) # ๋ค์ ๊น์ด ๋ค์ ์ซ์๋ก ์ด๋ํ์ฌ ์ ๊ฐ์ ๋ค์ด์ค์ง ๋ชปํ๋๋ก
n = [1, 2, 3]
r = 2
result = [0] * r
dfs(0, 0) # level, begin(์ด๋์ ์์ํ ์ง)
728x90
๋ฐ์ํ