본문 바로가기
백준(Python) 풀이

백준 15651번. N과 M (3) (Python / 파이썬)

by yewonnie 2022. 4. 13.

문제

자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.
 - 1부터 N까지 자연수 중에서 M개를 고른 수열
 - 같은 수를 여러 번 골라도 된다.

입력

첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 7)

출력

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

문제 풀이

이번 문제는 15649번 문제에서

중복 없이 수를 골라야한다는 조건이

같은 수를 여러 번 골라도 된다는 조건으로 변형된 문제입니다.

 

따라서 15649번 문제에서 

해당 숫자가 array 안에 없다면 코드가 수행되도록 한 

조건을 삭제해주면 됩니다.


My Code

n, m = map(int,input().split()) # 자연수 N과 M

array = [] # 길이가 M인 수열을 저장할 list

def dfs():
    if len(array) == m: # 길이가 M이 됐다면
        for i in array: # array 원소들 출력
            print(i, end = ' ')
        print()
        return # 호출 됐던 위치로 돌아가기
    
    for i in range(1, n + 1): # 자연수 1~N까지 
        array.append(i) # i를 array에 삽입
        dfs()           # 재귀함수
        array.pop()     # array의 오른쪽 원소 삭제

dfs()

댓글