[algorihtm] 백준 1697번 숨바꼭질
·
algorithm/BFS
문제 설명 & 접근 방식이 문제는 수빈이의 위치가 X-1, X+1, 2X로 이동할 수 있다는 점을 보아 BFS를 이용해야 함을 알 수 있다그리고 2차원 배열이 아닌 1차원 배열로 접근해야 한다 n을 BFS의 첫 시작점 인덱스로 하고 좌우 그리고 2배 지점을 탐색하면서기준점에 +1을 계산하여 걸린시간을 계산하여 저장한다탐색하는 인덱스가 k와 같아지면 동생을 찾은 것이므로 걸린 시간을 출력해주면 된다 코드#include #include using namespace std;int board[100002];int n,k;int main() { cin >> n >> k; queue q; board[n]=1; q.push(n); // 큐에는 인덱스를 넣어야함 while(!q.empty()..
[algorithm] 백준 4179번 불!
·
algorithm/BFS
문제 설명 & 접근 방식이 문제는 불과 지훈이가 상하좌우 네 방향으로 움직일 수 있으므로 BFS 문제임을 알 수 있고지훈이의 BFS와 불의 BFS를 따로 처리 해주어야 한다 우선 불의 BFS를 먼저 처리해서 불의 전파 시간을 구한다그 후 지훈이의 BFS를 돌리는데 만약 지훈이가 특정 구간을 x시간에 방문할 수 있는데x시간 이하 시간에 불이 붙는다면 지훈이는 접근이 불가능하게 된다이 부분을 if문과 continue로 처리해주면 된다 탈출하게된다면 지훈이의 도달 시간을 출력해주면 되고 탈출하지 못하면 IMPOSSIBLE을 출력한다탈출했다는 것은 탐색 구간이 범위 밖을 벗어났다는 의미이다 참고로 불이 없을 수 있고 불이 여러개일 수도 있다불이 없는 경우는 밑의 오류 부분에서 다룰 것이고불이 여러개인 경우 백..
[algorithm] 백준 7576번 토마토
·
algorithm/BFS
문제 설명 & 접근 방식익은 토마토(1), 익지 않은 토마토(0), 토마토 없음(-1) 총 3가지 상태가 있으며익은 토마토는 하루가 지나면 상하좌우의 익지 않은 토마토들을 익게만든다총 몇일이 지나야 상자 안의 토마토가 모두 익는 지 구해야하는 문제다 이 문제는 토마토가 상하좌우 방향으로만 익어가고다 익는 최소일수를 구해야 하므로 BFS를 사용해야 함을 알 수 있다일수를 구하는 방법은 시작점으로부터의 거리를 계산하는 방식으로 구하면 된다 하지만 익은 토마토가 있는 지점이 여러 곳일 수 있어 익은 토마토가 위치한 곳을 모두 큐에 넣고 BFS를 돌리면 된다 코드#include #include #include #include #define X first#define Y secondusing namespace s..
[algorithm] 백준 2178번 미로 탐색
·
algorithm/BFS
문제 설명 & 접근 방식이 문제는 다차원 배열에서의 거리 측정 문제이다배열의 좌측 상단에서 시작해서 우측 하단으로 가는 최단 거리를 구해야 한다 BFS를 활용하여 시작점으로부터 연결된 모든 점들을 탐색하며 최단 거리를 구할 수 있다해당 칸이 접근 가능하여 방문 표시를 1로 남기는 것 대신에 시작점과의 거리를 남겨 구할 수 있다 #include #include #include #include using namespace std;#define X first#define Y secondstring board[502];int vis[502][502];int dx[4] = {1,0,-1,0};int dy[4] = {0,1,0,-1};queue> q;int n,m;int main() { ios::sync_wi..
[algorithm] 백준 1926번 그림
·
algorithm/BFS
문제 설명 & 접근 방식이 문제는 그림의 개수와 가장 넓은 그림의 넓이 총 2가지를 구해야 한다 우선 시작점이 하나로 정해져있는 것이 아닌 모든 구간이 시작점이 될 수 있으므로이중for문으로 시작점이 될 수 있는 지점을 찾아야 한다 그림의 개수는 while문을 빠져나왔다는 것이 그림이 완성됐다는 의미이므로while문을 탈출했을 때 카운트를 해주면 된다 그림의 넓이는 while문을 돌 때 해당 칸이 접근가능하여 방문표시를 남길 때 카운팅을 같이 해주어 구하면된다그림이 완성될 때마다 max함수를 이용하여 그 전의 가장 넓었던 그림과 지금 완성된 그림 중 어느 것이 더 큰지 구한다 코드// Online C++ compiler to run C++ program online#include #include #inc..