jyukki published on 2020-02-28 included in 백준 https://www.acmicpc.net/problem/2178
풀이: 이동횟수가 i 일때,
이동횟수가 i - 1 인 값들에서 왼쪽, 오른쪽, 위, 아래 중 값이 1이고, 방문한적 없는 곳을 찾아 좌표를 큐에 넣는다.
만약 현재 좌표가 도착위치라면, 이동횟수 i를 출력한다.
코드: 사용언어 : c++
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 #include <iostream>#include <vector>#include <queue>using namespace std; int n, m, k, q, w; vector<string> a; queue<pair<int, int>> dp2; bool b[102][102]; int main() { cin >> n >> m; a.
jyukki published on 2020-02-28 included in 백준 https://www.acmicpc.net/problem/7576
풀이: [백준]2178 미로 탐색 참고
코드: 사용언어 : c++
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 #include <iostream>#include <queue>using namespace std; int n, m, k, q, w, a[1002][1002]; queue<pair<int, int>> dp2; int main() { cin >> m >> n; for (int i = 0; i < n; i++) for (int t = 0; t < m; t++) { cin >> a[i][t]; if (a[i][t] == 1) dp2.
플로이드-와샬 알고리즘(Floyd-Warshall Algorithm)
플로이드-와샬 알고리즘(Floyd-Warshall Algorithm) 한번의 실행으로 “모든 노드” 간 최단 경로를 구하는 알고리즘. 시간복잡도 $$ O(n^3) $$
위 그림의 초기값은 다음과 같다.
0 5 ∞ 9 1 5 0 2 ∞ ∞ ∞ 2 0 7 ∞ 9 ∞ 7 0 2 1 ∞ ∞ 2 0 이때,
1 번 노드를 중간 노드로 한다면,
jyukki published on 2020-02-27 included in 백준 https://www.acmicpc.net/problem/10942
풀이: DP[i][t] : i 번쨰 수 부터 t 번째 까지 수가 팰린드롬을 이룬다면 1, 아니라면 0
a[i] == a[t] 라면,
DP[i][t] = DP[i + 1][t - 1]
a[i] != a[t] 라면,
DP[i][t] = 0
테스트 케이스가 많아 시간초과가 날 수 있으므로 메모이제이션을 하자! 코드: 사용언어 : c++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include <iostream>#include <string.
jyukki published on 2020-02-27 included in 백준 https://www.acmicpc.net/problem/1260
풀이: DFS 와 BFS를 출력한다.
코드: 사용언어 : c++
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 32 33 34 35 36 #include <iostream>#include <queue>#include <string.h>using namespace std; int n, m, v, q, w, a[1002][1002] = {}; bool b[1002]; void dfs(int x) { b[x] = true; cout << x << " "; for (int i = 1; i <= n; i++) if (a[x][i] && !
jyukki published on 2020-02-27 included in 백준 https://www.acmicpc.net/problem/1520
풀이: DP[i][t] : (1,1) ~ (i, t) 까지 내리막으로 갈 수 있는 경우의 수
현재 값에서 왼쪽, 오른쪽, 위, 아래 값이 각각 현재 값보다 크다면,
DP[현재] += DP[왼쪽, 오른쪽, 위, 아래] 로 구할 수 있다.
시간초과가 날 수 있으므로 메모이제이션을 하자! 코드: 사용언어 : c++
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 #include <iostream>#include <string.