본문 바로가기
알고리즘/백준

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

by Bloofer 2020. 10. 21.

A. 문제설명

www.acmicpc.net/problem/2638

 

2638번: 치즈

첫째 줄에는 모눈종이의 크기를 나타내는 두 개의 정수 N, M (5≤N, M≤100)이 주어진다. 그 다음 N개의 줄에는 모눈종이 위의 격자에 치즈가 있는 부분은 1로 표시되고, 치즈가 없는 부분은 0으로 표

www.acmicpc.net

문제에 대한 자세한 설명은 링크 참조

1. 위 그림과 같은 N*M 땅이 존재

2. 땅의 검은 부분에는 치즈가 존재, 흰 부분에는 공기가 존재

3. 치즈는 상/하/좌/우로 2면이상 공기와 맞닿으면 1초이후 사라짐

4. 그러나 치즈에 둘러쌓인 공기부분은 치즈에 영향을 주지 않음

5. 치즈는 배열의 가장자리에는 존재하지 않는다고 할 때, 치즈가 땅에서 없어지기까지의 총 시간을 구하라

 

B. 접근법

BFS

 

간단한 BFS 문제이다. 여기서 조심해야 할 것은 치즈에 둘러쌓은 공기 부분을 무시해야 한다는 것인데, 나의 경우 air[][] 배열을 이용하여 처음에 가장자리에서 시작하여 치즈에게 영향을 주는 공기 부분을 먼저 체크하였다. 그 후, 해당 공기부분과 2면 이상 닿는 치즈를 땅에서 모두 없어질 때까지 구한다.

 

C. 풀이

1. 가장자리에서 시작하여 치즈 바깥부분에 존재하는 공기 부분을 air[][] 배열에 체크

2. 해당 공기부분과 2면 이상 닿는 치즈를 확인하여 제거

3. 배열 내 치즈가 모두 없어질 때까지 반복

4. 걸린 총 시간 반환

 

D. 내 코드