반응형
문제
https://www.acmicpc.net/problem/15649
15649번: N과 M (1)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
풀이
백트래킹 연습 문제
출력할 때
print(' '.join(map(str, arr)))
을 사용할 수도 있는 듯 하다. 해당 코드는 아래에 ver2로 첨부하였다.
코드
import sys
read = sys.stdin.readline
n,m = list(map(int,read().split()))
#1~n까지 자연수 중 중복없이 m개를 고르는 수열
vis=[0 for _ in range(n+1)]
arr=[0 for _ in range(n+1)]
def choose(k): #현재까지 k개의 숫자를 선택
if(k == m):
for i in range(m):
print(str(arr[i])+" ",end="")
print()
else:
for i in range(n):
if(vis[i] == 0):
vis[i] = 1 #방문 표시
arr[k] = i+1 #배열에 저장
choose(k+1) #k+1번째 수 고르기
vis[i] = 0
choose(0)
import sys
read = sys.stdin.readline
n,m = list(map(int,read().split()))
#1~n까지 자연수 중 중복없이 m개를 고르는 수열
#고른 수열은 오름차순
vis=[0 for _ in range(n+1)]
arr=[0 for _ in range(m)]
def choose(k): #현재까지 k개의 숫자를 선택
if(k == m):
print(' '.join(map(str, arr)))
else:
for i in range(n):
if(vis[i] == 0):
vis[i] = 1
arr[k] = i+1
choose(k+1)
vis[i] = 0
choose(0)
반응형
'알고리즘' 카테고리의 다른 글
[백준/15651][파이썬] N과 M(3) (0) | 2023.04.11 |
---|---|
[백준/15650][파이썬] N과 M(2) (0) | 2023.04.11 |
[백준/20055][파이썬] 컨베이어 벨트 위의 로봇 (0) | 2023.04.10 |
[백준/7562][Python] 나이트의 이동 (0) | 2023.04.07 |
[백준/1436][Python] 영화감독 숌 (0) | 2023.03.29 |