보글보글 개발일지
반응형

문제

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)
반응형
profile

보글보글 개발일지

@보글

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!