본문 바로가기

BOJ/C++

[BOJ] 9328. 열쇠

* 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