![[백준 C++] 7576 : 토마토](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbBmbmU%2FbtsMs5TMaOU%2FAAAAAAAAAAAAAAAAAAAAACC9ZBhcGJTHA6VPKQsncUfgsAl8DxVjrQxLb5uCE7Fg%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DlKOBzR%252FrYbE96Ea7AozqoZRIxhM%253D)
https://www.acmicpc.net/problem/7576BFS로 푸는 문제고, 시간초과에 유의해야 한다. visted를 bool로 하지 않고 int값으로 하여, 이 전에 있던 곳에서 +1을 해 날짜를 더해나가는 방식으로 구현하였다.#include #include #include using namespace std;int x, y, answer = 0;vector> list;vector> visited;int dx[4] = { -1 , 0, 1, 0 };int dy[4] = { 0, 1, 0, -1 };void init(){ int input; cin >> x >> y; list = vector>(y, vector(x, 0)); visited = vector>(y, vector(x, 0)); fo..
![[백준 C++] 11724 : 연결 요소의 개수](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbOBczF%2FbtsKZbBliGG%2FAAAAAAAAAAAAAAAAAAAAAP_j4D593b57ay4w1ih9N_5apog9bvFb0EDffWk6d9yS%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DlGWNFObia%252B4%252FYCM4%252B4b9bgtwi%252Fg%253D)
https://www.acmicpc.net/problem/11724BFS, DFS 전부 다 상관없지만, 필자는 BFS를 사용하였다.연결 요소는 간단하게 말해서 그래프의 개수이다.#include #include #include using namespace std;vector> graph;vector visited;int bfs(int start){ if (visited[start]) return 0; queue que; que.push(start); visited[start] = true; while (!que.empty()) { int current = que.front(); que.pop(); for (int i = 0; i > N >> M; graph = vector>(N + 1); visit..
![[백준 C++] 7562 : 나이트의 이동](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FssIMm%2FbtsKOzXhC7N%2FAAAAAAAAAAAAAAAAAAAAAHnJA6zgq6nHZ-iT4zUFQfPHGDEOZUqr8OLGtvoXobqp%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3Dyb7sGzb2Q8XmlgsM%252FpFkYwftoqI%253D)
https://www.acmicpc.net/problem/7562문제에서 주어진 내용에 있는 '최소 몇 번' 이라는 문구를 보고 BFS로 풀었다.#include #include #include using namespace std;vector> answer;vector> visited;int dx[8] = { -2, -1, 1, 2, -2, -1, 1, 2 };int dy[8] = { -1, -2, -2, -1, 1, 2, 2, 1 };void bfs(int X, int Y, int I){ queue> que; visited[Y].at(X) = true; que.push(make_pair(Y, X)); while (!que.empty()) { int currentY = que.front().first; ..
![[백준 C++] 1679 : 숨바꼭질](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fc4bPOl%2FbtsKNW5SYvC%2FAAAAAAAAAAAAAAAAAAAAADI8wEHKfFd6yb0R5tFkkrbfzhmHsjCrHmWjasa8KpYp%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3Dx05XI0VBYNABSCLDpgCb9pO7dzY%253D)
https://www.acmicpc.net/problem/1697이전글에 풀었던 미로 탐색에서 사용하였던 방법을 응용하면 되는 문제이다.#include #include #include using namespace std;vector list;vector visited;vector answer;void bfs(int start){ int size = list.size(); queue que; que.push(start); visited[start] = true; while (!que.empty()) { int current = que.front(); que.pop(); if (current - 1 >= 0) { if (!visited[current - 1]) { que.push(curr..
![[백준 C++] 2178 : 미로 탐색](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FcJQflk%2FbtsKMGoxzSt%2FAAAAAAAAAAAAAAAAAAAAAAgV4zccGUhjlhKtmRWkF_YCzq4ZQmfwQII-mZLRNwCV%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DHIHflrB9%252BoaigkaPAjY61vkqOSY%253D)
https://www.acmicpc.net/problem/2178최소 칸 수를 확인하기 위해서 DFS보다는 BFS로 푸는 것이 좋다고 하여, BFS로 풀어보았다.#include #include #include #include using namespace std;vector maze;vector> visited;vector> answer;int N, M;int dx[4] = { -1, 0, 1, 0 };int dy[4] = { 0, 1, 0, -1 };void bfs(){ queue> que; int x, y = 0; visited[0].at(0) = true; answer[0].at(0) = 1; que.push(make_pair(0, 0)); while (!que.empty()) { y = que.f..
![[백준 C++] 2606 : 바이러스](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FcJY9lp%2FbtsKKGnPhZh%2FAAAAAAAAAAAAAAAAAAAAAC24UaN5XQ5KLXzANxT4vEnFnSTa7JaAOYEx-89gY4Qs%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3Dcahd8%252Fl5ICAiRl61zzFxn1XOFN0%253D)
https://www.acmicpc.net/problem/2606DFS, BFS 어느 것을 사용해도 상관없지만, 필자는 BFS를 이용하였다.#include #include #include #include using namespace std;vector> list;vector visited;int bfs(){ queue que; int answer = 0; visited[1] = true; que.push(1); while (!que.empty()) { int current = que.front(); que.pop(); for (int i = 0; i > N >> M; list = vector>(N + 1); visited = vector(N + 1, false); for (int i = 0; i >..
![[백준 C++] 24445 : 알고리즘 수업 - 너비 우선 탐색 2](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fcn92rK%2FbtsKIzPUugy%2FAAAAAAAAAAAAAAAAAAAAAD92q9hZXIWhKrwxGa4K0RLPaLqrx91p7_0x6z4iCMBf%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DAqomX8RIec68%252Bz0%252FAnd9V24aMYI%253D)
https://www.acmicpc.net/problem/2444524444번 문제에서 내림차순으로 변경하는 것 말고는 같은 문제이다.#include #include #include #include using namespace std;vector> list;vector visited;int visitedOrder = 1;void dfs(int start){ queue que; visited[start] = visitedOrder++; que.push(start); while (!que.empty()) { int current = que.front(); que.pop(); for (int i = 0; i b;}int main(){ int N, M, R; cin >> N >> M >> R; list ..
![[백준 C++] 24444 : 알고리즘 수업 - 너비 우선 탐색 1](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fb2vy6W%2FbtsKGTgEF3U%2FAAAAAAAAAAAAAAAAAAAAAGyjIwhlEO5FrNZRR6OnNipYPmquJYJSq8V2jft-sFui%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3Dyuuf1U4OeIK3TD0i1B4YxEa%252Bxj4%253D)
https://www.acmicpc.net/problem/24444BFS의 기초를 다질 수 있는 문제이다.#include #include #include #include using namespace std;vector> list;vector visited;int visitedOrder = 1;void dfs(int start){ queue que; visited[start] = visitedOrder++; que.push(start); while (!que.empty()) { int current = que.front(); que.pop(); for (int i = 0; i > N >> M >> R; list = vector>(N + 1); visited = vector(N + 1, 0); for ..
![[백준 C++] 1260 : DFS와 BFS](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbiCHCT%2FbtsKCvOT9PK%2FAAAAAAAAAAAAAAAAAAAAACQyxFqg9WD_EefJMMVVL7Ris04c8UtCrc6ZcH3HiPqu%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DXsqKlwJ2Rg%252FjcL3SMb1UBPQDU8s%253D)
https://www.acmicpc.net/problem/1260주어진 입력에 맞춰 DFS와 BFS로 방문하는 순서 그대로 출력하면 되는 문제이다.#include #include #include #include using namespace std;bool visited[1001];vector graph[1001];void solution_dfs(int start){ visited[start] = true; cout que; que.push(start); visited[start] = true; while (!que.empty()) { int corrent = que.front(); que.pop(); cout > N >> M >> V; for (int i = 0; i > v1 >> v2; gra..