반응형
문제
https://www.acmicpc.net/problem/15650
15650번: N과 M (2)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
풀이
N과M(1)에서 [1,2], [2,1]과 같은 경우는 중복되는 경우로 보고 [1,2]만 출력하는 문제이다.
start번호를 줘서 배열에 저장할 수에 제한을 주면 된다.
코드
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,start): #현재까지 k개의 숫자를 선택, 시작 숫자
if(k == m):
print(' '.join(map(str, arr)))
else:
for i in range(start,n):
if(vis[i] == 0):
vis[i] = 1 #방문표시 남기고
arr[k] = i+1 #배열에 수 저장
choose(k+1,i+1) #다음 수 선택
vis[i] = 0
choose(0,0)
반응형
'알고리즘' 카테고리의 다른 글
[백준/15652][파이썬] N과 M(4) (0) | 2023.04.11 |
---|---|
[백준/15651][파이썬] N과 M(3) (0) | 2023.04.11 |
[백준/15649][파이썬] N과 M(1) (0) | 2023.04.10 |
[백준/20055][파이썬] 컨베이어 벨트 위의 로봇 (0) | 2023.04.10 |
[백준/7562][Python] 나이트의 이동 (0) | 2023.04.07 |