알고리즘

[백준 15649 파이썬] N과 M(1)

로드존슨 2023. 3. 13. 18:29
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