함량 100%

함지의 개발일기

알고리즘/브루트포스

[백준/브루트포스] 15651 N과 M (3) (Python, 파이썬)

Haamjee 2021. 5. 15. 15:06

 

https://www.acmicpc.net/problem/15651

 

15651번: N과 M (3)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

 

이 문제의 조건은 다음과 같다.

  • 1부터 N까지 자연수 중에서 M개를 고른 수열
  • 같은 수를 여러 번 골라도 된다.

 

재귀함수를 이용하여 풀었는데, 이 때 재귀함수는 어떤 위치에 올 수 있는 를 결정하는 용도이다.

재귀함수에서 중요한 것은 종료조건이다.

여기서의 종료조건은 M개를 다 뽑았을 때이다. 그때 배열에 저장한 수를 모두 출력하면 된다.  

 

이전의 N과 M 문제와 다른 조건은 같은 수를 중복해서 골라도 된다는 것이다.

N과 M 문제에서 중복값을 제거하기 위해 만들었던 배열 visited를 검사하는 코드를 지워주면 된다.

 

import sys
input=sys.stdin.readline

def go(index, n, m):
    if index == m:
        print(' '.join(map(str, arr)))
        return 

    for i in range(n):
        arr.append(i+1)

        go(index+1, n, m)
        arr.pop()


n, m = map(int, input().split())
arr=[]

go(0, n, m)