반응형
문제 링크: https://www.acmicpc.net/problem/15649
15649번: N과 M (1)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
내 풀이
1) 수열을 담을 리스트 하나 생성 arr = list()
2) dfs() 함수 만든다.
- 탈출조건은 arr 리스트의 길이가 m이 된 경우 출력하고 리턴한다.
- 1부터 n까지 반복하며 arr에 들어있지 않은 수를 append()한다.
- 그리고 dfs() 재귀함수 반복
- 재귀가 끝나면 backtracking 해서 그 다음으로 넘어간다. pop()
# boj15649 N과 M
# 실버3
# 메모리 30840 KB
# 시간 212 ms
n, m = map(int, input().split())
arr = list()
def dfs():
# 탈출 조건 : 수열 길이가 m 됐을 때.
if len(arr) == m:
print(' '.join(map(str, arr)))
return
# arr에 오름차순으로 append
for i in range(1, n+1):
if i not in arr:
arr.append(i)
dfs()
arr.pop() # backtracking
dfs()
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
boj11053 가장 긴 증가하는 부분수열 (실버2) - DP (0) | 2022.09.01 |
---|---|
boj12865 평범한 배낭 (골드5) - DP (0) | 2022.08.30 |
boj1484 다이어트 (골드5) - 투포인터 (0) | 2022.08.17 |
boj1806 부분합 (골드4) - 투포인터, DP // 시간초과 주의 (0) | 2022.08.16 |
boj1644 소수의 연속합 (골드3) - DP,에라토스테네스의 체(소수),누적합 (0) | 2022.08.15 |