백트래킹의 기본이다.
젤 처음 백 트래킹을 배웠을 때 pop() 하는게 이해가 안됐던 기억이 있다.
스택을 트리구조로 생각하면 이해하기 쉽다.
이해가 안된다면 결과값을 담을 리스트를 출력해보면 조금 이해하기에 수월하다.
import sys
N,M = map(int,input().split())
rs = []
bools = [0] * (N+1)
def tnsduf(sum):
if sum==M:
print(' '.join(map(str,rs)))
return
for i in range(1,N+1):
if bools[i]==False:
bools[i] = True
rs.append(i)
tnsduf(sum+1)
bools[i]=False
rs.pop()
tnsduf(0)
import sys
N,M = map(int,input().split())
rs = []
bools = [0] * (N+1)
def tnsduf(sum):
if sum==M:
print(' '.join(map(str,rs)))
return
for i in range(1,N+1):
print(rs)
if bools[i]==False:
bools[i] = True
rs.append(i)
print(rs)
tnsduf(sum+1)
bools[i]=False
rs.pop()
tnsduf(0)
-----------------------------------------------------------------------------------------------------------------------------------
한동안 자바만 썼더니 너무 자바스러운 문법같아서 좀 찾아 봤더니 훨씬 나은 파이썬스러운 코드가 있어 기록한다.
N, M = map(int,input().split())
rs=[]
def tnsduf():
if len(rs)==M:
print(" ".join(map(str,rs)))
return
for i in range(1,N+1):
if i not in rs:
rs.append(i)
tnsduf()
rs.pop()
tnsduf()
'취준 > 백준' 카테고리의 다른 글
14889 - 파이썬 (0) | 2022.05.02 |
---|---|
14888 - 파이썬 (0) | 2022.05.01 |
15650 - 파이썬 (0) | 2022.04.05 |
18870 - 파이썬 (0) | 2022.04.04 |
10814 - 파이썬 (0) | 2022.04.04 |