개인 공부 공간/Algorithm
BOJ(백준) 15652번 N과 M (4) 파이썬
Hoon Kang
2021. 3. 22. 23:00
15652번: N과 M (4)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
코드
import sys
r=sys.stdin.readline
N,M=map(int,r().split())
nums=[i+1 for i in range(N)]
check=[False]*N
res=[]
def dfs(cnt):
if cnt==M:
print(*res)
return
for i in range(N):
if check[i]:
continue
res.append(nums[i])
dfs(cnt+1)
res.pop()
check[i]=True
for j in range(i+1,N):
check[j]=False
dfs(0)
해설
이 문제의 해결 방식 또한 N과 M (1) 문제 풀이와 매우 유사하다. 코드내에서 조건에 맞게 특정 숫자로 시작하는 수열을 다 찾은 경우 그 숫자를 더 이상 활용하지 않게 그 숫의 다음 인덱스부터만 False
로 지정해주고 넘어가야 한다.
결과