Code/BOJ
#9328 열쇠
milkteagood
2020. 1. 5. 10:53
728x90
반응형
출처:https://www.acmicpc.net/problem/9328
각각의 문(영대문자)마다 맞는 열쇠(영소문자)가 있고 열쇠 획득시 같은 알파벳의 문은 몇개가 되든 계속 열 수 있다.
외부에서 침입하여 문을 열고 문서($)를 최대한 많이 갖고 나오는 문제이다.
두가지 방법으로 접근하여 풀었다.
첫 번째로 외부 (0,0)에서 시작하여 bfs로 맵 전체를 완전 탐색 후 획득한 열쇠들을 벡터나 큐에 저장한 후 해당 열쇠에 해당하는 문들을 모두 지도에서 제거한 후 다시 (0,0)에서 bfs로 맵 전체를 완전탐색하는 것을 열쇠 획득이 없을때까지 반복하는 것이다.
두 번쨰로는 같은방식인 bfs로 맵 전체를 탐색하다가 문을 열 수 없으면 일단 알파벳 별 문의 좌표를 저장할 수 있는 큐에 넣어둔다. 그러고나서 열쇠를 찾을 시에 문벡터를 열람하여 만약 해당 열쇠에 해당하는 문이 있으면 원래 탐색하는 q에 푸시한다. 그리고 해당 문벡터들은 열쇠가 있으므로 다 pop연산을 해줘야 한다. 이런식으로 하면 탐색 한번에 문서를 모두 찾을 수 있게 된다.
실제로 시간도 92ms 에서 4ms로 줄어들었다.
먼저 첫번째 방식의 소스코드다
다음은 두번째 방식의 소스코드
728x90
반응형