[문제]
14502번: 연구소 (acmicpc.net)
14502번: 연구소
인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크
www.acmicpc.net
[문제 풀이]
n * m의 공간인 연구소에 바이러스가 퍼졌다. 2인 칸에서 부터 바이러스는 퍼지고 벽(1)의 부딪히거나 범위에 부딪히면 더 이상 퍼지지 못한다. 3개의 벽을 추가로 건설해서 바이러스를 최대한 덜 퍼트펴보자.
벽은 무조건 3개이고 0인 곳에 세울 수 있다.
그러니 0인 칸의 모든 좌표값을 알고 있을 때 이 중 3가지를 뽑아서 나올 수 있는 경우의 수가 문제에서 요구하는 거라고 봐도 무방할 것이다.
백준 n과 m 시리즈에서 자주 접했던 문제 즉, 0의 모든 좌표 (n) 에서 3개의 좌표(m)을 뽑아보자.
중복좌표를 만들지 않기 위하여 visited 처리와 loc이라는 벡터에 해당 위치를 넣고 빼고를 반복하면서 백트래킹을 해주었다.
이제 loc의 크기가 3 즉, 3개의 벽이 설치되었다면 bfs를 이용해서 2가 총 몇번을 갈 수 있는지 파악을 하자.
이와 같은 bfs를 통해서 우리들은 0의 좌표를 알 수가 있다.
bfs + 백트래킹 문제가 처음이면 어려울만 하지만 골드5를 넘어서는 bfs의 경우에는 조건이 추가되어 있거나 bfs + 이분탐색, 백트래킹 등으로 조건을 주는 경우가 많다. 처음에는 어려울 수 있지만 풀다보면 익숙해지니 양치기를 해보자.
[회고]
테스트 케이스가 좋아서 특별히 어려운 점은 없었다.
[코드]