문제
- 1~N까지 자연수 중에서 중복없이 M개를 고른 수열
- 고른 수열은 오름차순이어야한다.
문제 풀이
<백트래킹>
- 해를 찾는 도중 해가 아니어서 막히면, 되돌아가서 다시 해를 찾아가는 기법을 말합니다. 최적화 문제와 결정 문제를 푸는 방법이 됩니다.
- 어떤 노드의 유망성 점검 후 , 유망하지 않으면 그 노드의 부모 노드로 되돌아간 후 다른 자손 노드를 검색
- 1부터 시작해서 그 숫자와 다음 숫자를 배열에 넣고 ,
- 배열의 길이가 m이 되면 print하고 맨 뒤의 숫자를 pop한다.
- 그 다음 숫자를 배열에 넣고 배열의 길이가 m이 되면 print하고 맨 뒤의 숫자를 pop한다
- ...
코드
n,m = list(map(int,input().split())) #1234 2
s = []
def dfs(start): #start =
# print(f'dfs 호출시작, start = {start}')
if len(s)==m:
print(' '.join(map(str,s)))
return
for i in range(start,n+1):
if i not in s:
s.append(i)
# print(f's.append = {s}')
dfs(i+1)
s.pop()
# print(f's.pop = {s}')
# print(f'dfs호출 끝, start = {start}')
dfs(1)
728x90
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
[백준] 2579 계단 오르기 파이썬 풀이 (동적 계획법) (0) | 2021.06.24 |
---|---|
[백준] 9663 N-Queen 파이썬 풀이 (백트래킹) (1) | 2021.06.24 |
[백준] 2630 색종이 만들기 파이썬 (분할정복) (0) | 2021.06.23 |
[백준] 2108 통계학 파이썬 풀이 (정렬) (0) | 2021.06.23 |
[백준] 1149 RGB거리 파이썬 풀이(동적 계획법) (0) | 2021.06.23 |