728x90
https://www.acmicpc.net/problem/15649
15649번: N과 M (1)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
아이디어
-백트래킹 재귀함수 안에서 , FOR 돌면서 숫자 선택(이때 방문여부 확인)
-재귀함수에서 M개를 선택할경우 PRINT
시간복잡도
-N! 이면 10까지 가능 , 주어진문제는 8까지이니가 가능
자료구조
-결과값 저장
-방문여부 체크
import sys
input=sys.stdin.readline
N,M= map(int,input().split())
rs=[]
chk=[False]*(N+1)
def recur(num):
if num== M:
print(' '.join(map(str,rs)))
return
for i in range(1,N+1):
if chk[i]==False: #방문여부 체크
chk[i]=True
rs.append(i)
recur(num+1)
chk[i]=False
rs.pop()
recur(0)
728x90
'알고리즘' 카테고리의 다른 글
[백준 11404번 파이썬] 플로이드 (0) | 2023.03.14 |
---|---|
[백준 2559 파이썬] 수열 (0) | 2023.03.14 |
[백준 1926번 파이썬] 그림 (0) | 2023.03.12 |
다익스트라 알고리즘동작과정 (우선순위큐) (1) | 2023.03.10 |
[백준 7576 파이썬 ] 토마토 (0) | 2023.03.09 |