시작이 반

[백준] 15650번(python 파이썬) 본문

알고리즘/백준

[백준] 15650번(python 파이썬)

G_Gi 2021. 1. 10. 01:27
SMALL

https://www.acmicpc.net/problem/15650

 


15649번에서 오름차순을 하고, 중복을 없앤 방식이다.

1.

재귀를 수행할때 반복문을 시작해야할 숫자를 같이 넣어준다.

현재 i 보다 +1 인 값을 건내줘서 반복문이 그 값부터 시작하게 한다. 

 

2.

list의 마지막 원소값을 확인하여 그 값보다 i 가 클경우만 재귀를 수행한다.

깊이가 0일땐 무조건 재귀

 

** if depth == 0 or visit_number[len(visit_number) - 1] < i:

 


n, m = map(int, input().split())
visit_number = []

def BackT(start, depth):
    if depth == m:
        for i in visit_number:
            print(i, end=' ')
        print()
        return
    for i in range(start, n + 1):
        if i not in visit_number:
            visit_number.append(i)
            BackT(i + 1, depth + 1)
            visit_number.pop()

def BackT2(depth):
    if depth == m:
        for i in visit_number:
            print(i, end=' ')
        print()
        return
    for i in range(1, n + 1):
        if i not in visit_number:
            if depth == 0 or visit_number[len(visit_number) - 1] < i:
                visit_number.append(i)
                BackT2(depth + 1)
                visit_number.pop()


#BackT(1, 0)
BackT2(0)
LIST

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 15652번(python 파이썬)  (0) 2021.01.10
[백준] 15651번(python 파이썬)  (0) 2021.01.10
[백준] 15649번(python 파이썬)  (0) 2021.01.10
[백준] 2206번(python 파이썬)  (0) 2021.01.08
[백준] 1697번(python 파이썬)  (0) 2021.01.08