9328번 - 열쇠
우선모든 TC다 통과하고 어디가 잘못되서 틀렸다고 나오는지 모르겠습니다.
아이디어 : (0,0)에서 시작해서 우선 BFS탐색을 시도합니다.
원래 기존에 가지고있던 key를 사용하여 문을 열수있으면 열고 가는식으로 진행하였습니다.
BFS를 마치면 그 과정에서 새롭게 얻은 key를 가지고 다시 door에 저장되어있던 door의 좌표를 통하여
BFS를 시도합니다. 이과정에서 새롭게 key를 주운것이 없으면 더이상 door를 열고 들어갈수없다고
판단하여 while문을 빠져나왔습니다. ( 이역할을 keyflag가 해줍니다.)
무엇이 문제일까요
우선 CheckRange 함수의 범위가 이상합니다. 좌표는 세로 1에서 h, 가로 1에서 w까지만 존재하는데 왜 0과 h+1, 0과 w+1을 각각 허용하고 있나요?
그리고 열쇠를 가지고 있다고 해서 해당 문에 반드시 도달할 수 있는 건 아닙니다. 밖에서부터 안으로 들어오는 경로가 있어야 합니다.
감사합니다 밖에서 안으로 들어오는 경로를 체크안하고 그냥 문의 위치부터 BFS를 써서 생기는 문제였네요
checkRange는 이렇게 생각했습니다. 어느지점에서 시작할지 애매해서
세로 1~h 가로 1~w까지 입력받고
그 테두리도 '.'로 설정하여
BFS를 시도하는식으로 했습니다.
! ! ! ! ! !!* * * * !!* $ A *!!* * * * !! ! ! ! ! ! -> 이런식으로
두번째로 언급하신 문제때문이였습니다. 감사합니다.
map을 입력받을때 door를 push하는게 아니라
BFS에서 'A'~'Z' 만날때 door에 push하였고
'a'~'z' 열쇠 얻는 부분에서 큐에 좌표를 push안해줬었네요
AC받았습니다. 도움 감사합니다.
댓글을 작성하려면 로그인해야 합니다.
minjae200 5년 전
우선모든 TC다 통과하고 어디가 잘못되서 틀렸다고 나오는지 모르겠습니다.
아이디어 : (0,0)에서 시작해서 우선 BFS탐색을 시도합니다.
원래 기존에 가지고있던 key를 사용하여 문을 열수있으면 열고 가는식으로 진행하였습니다.
BFS를 마치면 그 과정에서 새롭게 얻은 key를 가지고 다시 door에 저장되어있던 door의 좌표를 통하여
BFS를 시도합니다. 이과정에서 새롭게 key를 주운것이 없으면 더이상 door를 열고 들어갈수없다고
판단하여 while문을 빠져나왔습니다. ( 이역할을 keyflag가 해줍니다.)
무엇이 문제일까요