일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- GCP
- 시뮬레이션
- 분할 정복
- 구현
- 스택
- 재귀
- dfs
- c++
- 데이크스트라
- web
- Reversing
- DP
- CVE
- 누적 합
- 백트래킹
- JPA
- java
- 이분 탐색
- error
- OS
- Spring
- 최단 경로
- 문자열
- 우선순위 큐
- BFS
- thymeleaf
- dynamic debugging
- 맵
- 위상 정렬
- 그리디
- Today
- Total
목록백트래킹 (3)
hades
🥅 문제https://www.acmicpc.net/problem/15666 🔍 설계같은 수를 여러 번 사용해도 되므로, 수를 저장할 때 여러 개를 저장할 필요가 없으므로 중복을 제거한다. 중복을 제거하기 전에 오름차순 정렬이 이루어지므로, 비내림차순으로 결과를 출력할 준비가 되었다. 중복을 허용하므로 방문 처리는 필요가 없고, 비내림차순이므로 마지막으로 사용한 인덱스부터 이후까지 사용할 수 있다. 👊 풀이#include #include #include #include using namespace std;int n, m, temp;vector number;vector result;void bt(int count, int last_idx) { if (count == m) { for (int i = 0..
🥅 문제https://www.acmicpc.net/problem/15654 🔍 설계전형적인 백트래킹 문제이다. 사전 순으로 출력해야 하므로, 오름차순 정렬 후, 백트래킹을 사용하면 된다. 👊 풀이#include #include #include using namespace std;int n, m;vector number(8);vector visited(8);vector temp;void bt(int count) { if (count == m) { for (int i = 0; i > n >> m; for (int i = 0; i > number[i]; } sort(number.begin(), number.begin() + n); bt(0); return 0;}
🥅 문제https://www.acmicpc.net/problem/1987 🔍 설계어떤 알파벳을 중복해서 방문할 수 없으므로, 알파벳에 대한 방문 여부를 visited에 저장한다. 말이 최대 연속해서 몇 칸을 지날 수 있는지 구하기 위해서는 DFS를 이용해야 한다. 지나는 경로 중간에 다른 방향으로 경로를 탐색하기 위해 백트래킹을 이용한다. 👊 풀이#include #include #include using namespace std;int r, c, result = 0;int dx[] = { -1,1,0,0 };int dy[] = { 0,0,-1,1 };vector> board(20, vector(20));vector visited(26);string s;void dfs(int cur_x, int cu..