BOJ(백준) 15652번 N과 M (4) 파이썬
2021. 3. 22. 23:00ㆍ개인 공부 공간/Algorithm
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
로 지정해주고 넘어가야 한다.
결과
'개인 공부 공간 > Algorithm' 카테고리의 다른 글
BOJ(백준) 2437번 저울 파이썬 (0) | 2021.03.23 |
---|---|
이것이 코딩 테스트다 with 파이썬 - 큰 수의 법칙 (1) | 2021.03.23 |
BOJ(백준) 15651번 N과 M (3) 파이썬 (0) | 2021.03.22 |
BOJ(백준) 15650번 N과 M (2) 파이썬 (0) | 2021.03.22 |
BOJ(백준) 15649번 N과 M (1) 파이썬 (0) | 2021.03.22 |