본문 바로가기

알고리즘/python

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

반응형

[문제 출처]

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

 

15649번: N과 M (1)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

 

 

[소스 코드]

dfs 알고리즘을 사용해서 모든 경우의 수열을 출력하였다.

#15649

n, m = map(int,input().split())

sq = []
def dfs():
  if len(sq)==m:
    print(' '.join(map(str,sq)))
    return
  
  for i in range(1,n+1):
    if i not in sq:
      sq.append(i)
      dfs()
      sq.pop()

dfs()

 

n = 4, m = 2일 때를 예를 들어보면, 아래와 같이 된다.

과정의 일부만 적어보았다. dfs()는 계속해서 dfs()를 호출하므로 구분을 위해서 숫자와 여러 색을 사용했다. 

반응형