https://www.acmicpc.net/problem/15650
15650번: N과 M (2)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
아이디어
고른 수열은 오름차순이여야 하기 때문에 for 문의 범위를 마지막으로 고른 수 + 1 부터 시작되게 변경하면 된다.
전체 코드
N, M = map(int, input().split())
visited = [0] * (N + 1)
def bt(nums, visited):
if len(nums) == M:
for num in nums:
print(num, end=" ")
print()
return
start = nums[-1] + 1 if nums else 1
for idx in range(start, N + 1):
if visited[idx] == 0:
visited[idx] = 1
bt(nums+[idx], visited)
visited[idx] = 0
bt([], visited)
'Coding Test > Python' 카테고리의 다른 글
[백준/백트래킹] 15652번: N과 M(4) (실버3, python) (0) | 2024.01.29 |
---|---|
[백준/백트래킹] 15651번: N과 M(3) (실버3, python) (1) | 2024.01.29 |
[백준/백트래킹] 15649번: N과 M(1) (실버3, python) (1) | 2024.01.29 |
[백준/dp] 2579번: 계단 오르기 (실버3, python) (0) | 2024.01.28 |
[백준/dp] 1904번: 01타일 (실버3, python) (1) | 2024.01.28 |