https://www.acmicpc.net/problem/9376

 

9376번: 탈옥

상근이는 감옥에서 죄수 두 명을 탈옥시켜야 한다. 이 감옥은 1층짜리 건물이고, 상근이는 방금 평면도를 얻었다. 평면도에는 모든 벽과 문이 나타나있고, 탈옥시켜야 하는 죄수의 위치도 나타

www.acmicpc.net

먼저 1명이 탈출한다고 생각해보자. BFS를 통해 Flood Fill을 돌리는데, 지나온 문의 개수가 0개일때, 1개일때, ... 순서대로 방문하면 된다.

구현은 각각의 위치를 방문할 때 인접한 위치가 비어 있으면 현재 사용중인 큐에 넣고, 문이면 다음 큐에 넣어서 BFS를 돌리는 방식으로 하였다. 각각의 위치에 몇번째 큐에서 방문하였는지를 기록하면 된다. 필자는 귀찮아서 큐 10000개로 처리하였지만, 큐2개로 잘 처리해도 해결할 수 있을 것이다.

감옥의 테두리에서 몇번째 큐에서 방문하였는지가 탈옥 과정에서 연 문의 수가 된다. 이것의 최소값을 찾으면 1명짜리 문제는 해결된다.

 

이제 2명이 탈출하는 경우를 따져야 하는데, 2가지 경우를 생각해야 한다. 

1. 두 명이 따로 탈출하는 경우

2. 두 명이 탈출하는 중에 만나는 게 가능한 경우

 

1은 두 사람에 대해 위의 내용을 처리하고 두 값을 합하면 된다. 

 

2는 임의의 지점을 잡아 그 지점에서 만나서 바깥으로 나간다고 생각하면 된다. 이 부분을 해결하기 위해서는 감옥의 테두리 지점들을 보면서 빈 공간이면 첫번째 큐에, 문이면 두번째 큐에 넣고 시작하는 BFS를 하나 더 돌려서 총 3번의 BFS를 돌렸다. 그리고 각 지점을 보면서 그 지점이 만나는 지점이라고 생각해 3개의 BFS에서 얻어진 값을 더하면 되는 것이다. 

마지막으로 이 지점이 문인지 아닌지에 대해 처리를 해주자. 문이면 3번 카운트되므로 2를 빼야된다.

 

1번째 TC에 대해 해당 풀이를 적용한 그림은 다음과 같다. 

1번째 죄수에 대한 BFS
바깥에서 보는 BFS

표시한 지점에서 세 BFS의 값을 합한 값이 6이고, 해당 지점이 문이므로  2를 빼면 4가 얻어진다. 이게 최소라 해당 TC의 답은 4가 된다. 

'알고리즘 > 백준' 카테고리의 다른 글

백준 5896 효율적으로 소 사기  (0) 2023.01.28
백준 10265 MT  (0) 2023.01.26
백준 3653 영화 수집  (0) 2023.01.23
백준 3090 차이를 최소로  (0) 2023.01.05
백준 7469 K번째 수  (0) 2023.01.05

+ Recent posts