* BFS로 완전 탐색을 한다.
* 열쇠 상태를 계속 저장한다. (keystate)
* 상근이는 빌딩 밖을 자유럽게 돌아다닐 수 있기 때문에 맵의 바깥쪽은 전부 '.'으로 만들어준다.
*(0,0)부터 탐색을 시작한다.
- 문을 만나면 지금 가지고 있는 키로 열 수 있는지 확인한다. 열 수 있다면 빈공간('.')으로 만들어준다.
- 문서를 만나면 훔칠 수 있는 문서의 개수인 (res)를 1만큼 증가시키고 빈공간('.')으로 만들어준다.
- 열쇠를 만나면 keystate를 비트마스킹을 이용하여 값을 변경해주고 빈 공간으로 만들어준다.
- 여기서 중요한 것은 열쇠를 만났을 때 지금 까지 방문했던 좌표 중에 이제는 열 수 있는 문이 있을 수도 있기 때문에
visited 배열을 초기화한다. (초기화하는 방법 말고도 여러가지 효율적인 방법이 존재할 수 있다.)
- 이제 위의 세 가지 경우를 거치고 나면 원래 빈공간('.') 인 경우와 위의 세 가지 경우에서 빈공간이 된 좌표가 있을 것이다.
빈 공간은 큐에 넣어줘서 계속 탐색할 수 있도록 한다.
'BOJ > C++' 카테고리의 다른 글
[BOJ] 17822. 원판 돌리기 (0) | 2020.04.19 |
---|---|
[BOJ] 16918. 봄버맨 (0) | 2020.04.17 |
[BOJ] 14391. 종이조각 (0) | 2020.04.16 |
[BOJ] 1600. 말이 되고픈 원숭이 (0) | 2020.04.07 |
[BOJ] 9470. Strahler 순서 + TC (0) | 2020.04.01 |