n, m = map(int, input().split()) number = [i for i in range(1, n+1)] array = [] def dfs(i): if len(array) == m: print(*array, end = " ") print() return for j in range(i, len(number)): array.append(number[j]) dfs(j) array.pop() dfs(0) 앞선 3번과 같은 코드에서, 어떤 수를 탐색한 다음, 그 수보다 작은 수는 다시 탐색하지 않도록 for문의 range를 i부터 시작하면 된다
n, m = map(int, input().split()) number = [i for i in range(1, n+1)] array = [] def dfs(): if len(array) == m: print(*array, end = " ") print() return for j in range(0, len(number)): array.append(number[j]) dfs() array.pop() dfs() 중복을 허용. 이 문제 한 번 틀렸었는데, 그 이유는 이 전 문제에서 pop 대신 remove(값)을 썼어서 중복이 허용되는 이 문제에서는 원하지 않는 이상한 애들이 지워졌기 때문. 이전 문제들을 풀 때, pop을 써야하는 게 stack의 원리상 맞는데 어차피 그냥 remove 써도 되지 않나, 굳..
n, m = map(int, input().split()) number = [i for i in range(1, n+1)] array = [] def dfs(i): if len(array) == m: print(*array, end = " ") print() return for j in range(i, len(number)): array.append(number[j]) dfs(j+1) array.remove(number[j]) dfs(0) 순서대로 출력하면 되기 때문에 for문의 시작 range를 1씩 올려가며 dfs를 호출한다.
백트래킹이란? 해를 찾아가는 도중, 해가 될 것 같지 않으면 더 이상 그 경로를 가지 않고 되돌아가는 기법 불필요한 경로를 미리 차단하여 반복문의 횟수를 줄일 수 있다. DFS 기반 n, m = map(int, input().split()) number = [i for i in range(1, n+1)] visited = [0] * n array = [] def dfs(visited, array): if visited.count(1) == m: print(*array, end = " ") print() for idx, j in enumerate(number): if visited[idx] == 0: visited[idx] = 1 array.append(j) dfs(visited, array) array...
- Total
- Today
- Yesterday
- version
- LGSVL
- torch
- numpy
- torchscript
- tensorflow
- error
- BFS
- 최소신장트리
- 프로그래머스
- 다익스트라
- n과m
- matplotlib
- 설치하기
- 카카오
- shellscript
- 코딩테스트
- 파이썬
- dfs
- 설치
- Python
- CUDA
- docker
- notfound
- 백트래킹
- 동적프로그래밍
- PIP
- 이것이코딩테스트다
- pytorch
- 백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |