[C++]BOJ 2583 - 영역 구하기
주어진 좌표로 배열에 해당 영역을 채우고 빈 영역을 dfs나 bfs 돌리면 되는 단순한 탐색 문제다.
주어진 좌표로 배열에 해당 영역을 채우고 빈 영역을 dfs나 bfs 돌리면 되는 단순한 탐색 문제다.
범위가 그리 크지 않기 때문에 내리는 비의 양을 완전탐색하고 그때마다 높이를 기준으로 dfs나 bfs를 돌리면 된다.
이 문제는 dfs로 풀어봤다.
주어진 집합에서 수 6개를 고르는 경우의 수를 완전탐색하는 문제다.
사전순 출력이기 때문에 dfs로 순차 출력하면 된다.
방향성을 가지는 그래프를 탐색하는 것으로 dfs, bfs 모두 가능하다.
이 문제는 dfs로 풀어봤다.
단순한 탐색 문제다.
모든 노드를 간선을 따라 탐색하며 방문처리를 한 후, 방문을 안한 노드가 있다면 모든 노드를 방문할 때 까지 탐색하고 총 탐색 횟수를 출력하면 된다.
dfs와 bfs모두 쓸 수 있다.
주어진 지도의 크기가 최대 8 * 8
이므로 바이러스와 벽이 아무것도 없다고 가정하면 벽을 세울 수 있는 경우의 수는 64C3
대략, 40,000
가지이다.
그러므로 벽을 세우는 문제는 완전탐색으로 해결할 수 있다.
벽을 세우는 모든 방법의 수 마다 바이러스가 퍼지는 경우를 dfs로 탐색하고 안전영역이 가장 큰 경우의 수를 기억해 마지막에 전체 칸의 갯수 - 퍼진 바이러스의 갯수 - 처음에 있던 벽의 갯수 - 3
을 출력한다.
bfs로도 풀 수 있다. 귀찮아서 안 해봤다.
배열을 순회하며 배추를 만나면 그 지점부터 bfs나 dfs를 돌리며 모두 0으로 초기화한다.
이 과정을 반복해 모둔 배추 영역을 찾은 후 그 영역의 갯수를 출력하면 된다.
bfs와 dfs모두 다뤄보겠다.