문제 https://www.acmicpc.net/problem/2638
풀이
1. 문제에서 가장자리 칸은 치즈를 두지 않는다고 했으니, (0,0)에서 BFS를 시작해서 상하좌우에 치즈칸이 있으면 그 치즈칸의 vis배열값을 +1해준다.
-> (0,0)에서 시작하는 이유는 치즈의 외부와 내부를 구분하기 위함이다. 그래서 치즈의 가장자리만 탐색하기 위함이다.
2. arr배열값이 1이고(치즈칸) vis배열값이 2이상인 것들만 arr배열값을 0으로 바꾼다. -> 치즈 녹이기 작업
3. vis배열을 0으로 초기화하고 arr배열에 1이 다 사라질때까지 반복한다.
코드 https://github.com/ziwonii24/Algorithm/blob/master/Baekjoon/2638.cpp
결과
처음에 치즈의 내부와 외부를 구분하기 위한 BFS와 치즈칸이 바깥공기와 인접하는 변이 몇 개인지 탐색하는 BFS를 따로 돌렸더니 메모리초과가 났다.
'알고리즘 문제풀이 > 알고리즘 C++ 풀이' 카테고리의 다른 글
[백준] 17135번: 캐슬 디펜스 (C++ 풀이) (2) | 2019.04.08 |
---|---|
[백준] 9376번: 탈옥 (C++ 풀이) (3) | 2019.04.04 |
[백준] 1261번: 알고스팟 (C++ 풀이) (0) | 2019.04.02 |
[백준] 1389번: 케빈 베이컨의 6단계 법칙 (C++ 풀이) (0) | 2019.04.02 |
[백준] 1525번: 퍼즐 (C++ 풀이) (0) | 2019.04.02 |