/images/logo.png

[백준]2178 미로 탐색

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.

[백준]7576 토마토

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.

[C++]플로이드-와샬 알고리즘(Floyd-Warshall Algorithm)

플로이드-와샬 알고리즘(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 번 노드를 중간 노드로 한다면,

[백준]10942 팰린드롬?

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.

[백준]1260 DFS와 BFS

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] && !

[백준]1520 내리막 길

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.