백트래킹의 기본이다.

젤 처음 백 트래킹을 배웠을 때 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

+ Recent posts