문제
자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.
- 1부터 N까지 자연수 중에서 M개를 고른 수열
- 같은 수를 여러 번 골라도 된다.
- 고른 수열은 비내림차순이어야 한다.길이가 K인 수열 A가 A1 ≤ A2 ≤ ... ≤ AK-1 ≤ AK를 만족하면, 비내림차순이라고 한다.
입력
첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)
출력
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.수열은 사전 순으로 증가하는 순서로 출력해야 한다.
문제 풀이
이번 문제는 15650번 문제에서 같은 수를 여러번 골라도 된다는
조건만 추가된 문제입니다.
따라서 15650번 문제의 코드에서
재귀함수를 수행할 때 해당 수의 다음 수인 i + 1이 아닌
해당 수 i를 넘겨주어
재귀함수를 수행하면 같은 수를 포함하여 오름차순으로
수를 고른 수열만 출력되게 됩니다.
My Code
n, m = map(int,input().split()) # 자연수 N과 M
array = [] # 길이가 M인 수열을 저장할 list
def dfs(start):
if len(array) == m: # 길이가 M이 됐다면
for i in array: # array 원소들 출력
print(i, end = ' ')
print()
return # 호출 됐던 위치로 돌아가기
for i in range(start, n + 1): # 현재수보다 큰 수만 수행
array.append(i) # i를 array에 삽입
dfs(i) # i로 재귀함수 수행
array.pop() # array의 오른쪽 원소 삭제
dfs(1)
'백준(Python) 풀이' 카테고리의 다른 글
백준 2583 번. 영역 구하기 (Python / 파이썬) (0) | 2022.04.15 |
---|---|
백준 6603번. 로또 (Python / 파이썬) (0) | 2022.04.13 |
백준 15651번. N과 M (3) (Python / 파이썬) (0) | 2022.04.13 |
백준 15650번. N과 M (2) (Python / 파이썬) (0) | 2022.04.13 |
백준 15649번. N과 M (1) (Python / 파이썬) (0) | 2022.04.13 |
댓글