백준/탐색 15

[백준] C++ 17141번(연구소 2)

바이러스를 놓을 수 있는 칸에 바이러스를 놓아 최소한의 시간에 모두 감염시키는 문제이다. 문제 해결 방법1. 바이러스를 놓을 수 있는 칸의 조합을 구해야 한다.(순열 XX 조합 OO)2. 조합 별로 모두 BFS를 해서 최솟값을 구한다. 입력이 이렇게 들어오면 바이러스 조합이 될 수 있는 모든 경우의 수에 대해 BFS를 해서 가장 적게 걸리는 조합을 찾으면 된다!만약 모든 조합에 대해 바이러스를 퍼뜨릴 수 없다면 -1을 출력.#include #include #include using namespace std;int arr[51][51];int arr2[51][51];vector > V;int row[4]={0,0,-1,1};int col[4]={-1,1,0,0};int min1=987654321;void..

백준/탐색 2024.07.19

[백준] C++ 2638번(치즈)

주어진 치즈가 모두 녹아 없어지는데 걸리는 정확한 시간을 정수로 첫 줄에 출력하는 문제이다. 문제 해결 방법1. 노출된 치즈의 위치를 찾는다2. 노출된 치즈를 녹인다.3. 위 과정을 반복한다. 그렇다면 노출된 치즈의 위치를 어떻게 판별할까??노출된 치즈는 4변 중에서 적어도 2변 이상이 실내온도의 공기와 접촉한 것으로 정의되어있다.즉 치즈가 2번 방문 되어야한다는 말이다. 보통은 visited가 0이면 방문을 하고  vistied를 1로 바꾸는데 이 문제에서 나는 vistied가 2 미만이면 방문을 하도록 설정하였다.공기를 지나가게 되면 vistied를 2로 바꾸고 치즈를 만나면 visited++를 해주어서 노출된 치즈의 위치를 찾았다.if(arr[num1+row[i]][num2+col[i]]==0){ ..

백준/탐색 2024.07.16

[백준] C++ 2636번(치즈)

첫째 줄에는 치즈가 모두 녹아서 없어지는 데 걸리는 시간을 출력하고, 둘째 줄에는 모두 녹기 한 시간 전에 남아있는 치즈조각이 놓여 있는 칸의 개수를 출력하는 문제이다.(전형적인 BFS문제) 문제 해결 방법1. 노출된 치즈의 위치 판별하기2. 노출된  치즈를 녹이기3. 위 과정을 치즈가 다 녹을 때까지 반복  노출된 치즈의 위치를 판별하기만 하면 풀리는 문제이다. 노출된 치즈의 위치를 어떻게 판별할까??문제에 보면 가장자리에는 X표시가 되어있다는 사실을 알 수 있다. 가장자리에는 치즈를 놓지 않는다는 말이다.즉 가장자리의 어떠한 부분에서 시작해서 치즈를 만날 때까지 너비우선탐색 해주면 치즈의 위치를 찾을 수 있다는 말이다.무한 루프 방지를 위해 visited를 통해 방문했던 장소를 저장하고 만약 그곳이 ..

백준/탐색 2024.07.16

[백준] C++ 1743(음식물 피하기)

#include using namespace std;int arr[101][101];void DFS(int i, int j);int dx[4]={1,-1,0,0};int dy[4]={0,0,1,-1};int count=0;int N=0;int M=0;int main(void){ int K=0; cin>>N>>M>>K; for(int i=0; i>num1>>num2; arr[num1][num2]=1; } int max=0; for(int i=1; imax) { max=count; } } } } cout0&&j+dy[l]>0&&j+dy[l] 상하좌우에 음식물이 있다면 합친다. 합친 값이 가장 큰 음식물의 크기를 출력하는 문제이다.DFS로 상하좌우를 살피면서 음식물을 합..

백준/탐색 2024.07.06