nakalic   2년 전

11,12 라인을 고쳤더니 정답으로 되는데 


위 소스로 하면 왜 틀린걸까요? BFS인데 테이블 모양이 아니라 감이 안옵니다 ㅠㅠ

위 소스로 하면 한 박자 늦어서 그런건가요 ?

BFS인데 짧은 반례를 찾지 못해서 직접 그려보질 못하겠는데 위 소스로 직접 그려보면서 눈으로 확인할만한 간단한 반례가 있을까요 ?

fail   2년 전

정말 사소한 차이가 있는데 둘이 같은 위치에 서있으면 위의 코드는 문제가 발생합니다.

(같은 위치에 있는데 왜 숨바꼭질을 하죠?)

nakalic   2년 전

BFS 라는 것이 머릿속으로 계산이 안되다 보니 직접 그려가며 왜 같은 위치에 있을 때 문제가 발생하는지 눈으로 디버깅 해봐야겠네요 .....

같은 위치가 아니라면 문제는 발생하지 않는건가요 ?

fail   2년 전

네 실제로 위의 코드에 같은 위치에서의 예외조건만 달아주면 정답을 받을 수 있었습니다.

nakalic   2년 전

혹시 왜 그런 이유가 발생하는지 알 수 있을까요?? 눈으로 디버깅 하고 있는데 명확하게 이해가 되지 않아서요 ㅜㅜ

fail   2년 전

위의 코드에서는 방문처리를 1 이상의 수를 넣는 걸로 하고 있는데요

board[K]에 0이 아닌 값이 들어가게 되면 반복문을 탈출하여 결과를 얻는 코드로서 잘 동작하고 있습니다.

하지만 N=K인 경우 정답으로는 board[K]=0인 결과를 출력해야 하지만 11~12번째 줄 조건문에 의해 board[K]>0 이거나 큐가 비워져야 반복문에서 탈출할 수 있습니다.

사실 큐가 비워질 때 까지 한참 헛돌더라도 board[K]에 값만 들어가지 않는다면 시간 초과 여부에 따라 괜찮을 수도? 있었겠지만

N=K=0인 경우에는 14~17번째 줄 for문이 돌아가 board[K]=1이 되고 나머지의 N=K인 경우에는 board[K]=2가 되어 오답이 되버립니다.

반면 아래의 코드는 탐색이 들어가기도 전에 N=x=K에서 끊어버리니까 바로 board[K]=0을 얻을 수 있고요.

댓글을 작성하려면 로그인해야 합니다.