omh9876   2년 전

bfs를 이용하여 풀었습니다.

어떠한 지점을 방문할 때 벽을 자신보다 덜 뚫거나 똑같은 횟수를 뚫은 친구가 그 지점을 방문한 적이 있다면 해당 지점으로 이동하지 못하고  그 반대의 경우는 이동할 수 있다는 점에서 착안하여 해당지점의 vis값이 해당 지점을 방문한 친구가 벽을 뚫었던 횟수로 하여 내가 벽을 뚫은 횟수가 해당지점의 vis값보다 크거나 같다면 이동하지 못하게 하였습니다. 물론 반대의 경우는 이동한 후 vis값을 자신이 벽을 뚫은 횟수로 재설정 하였고요.

vis값의 초기화는 벽이 있을 때 벽을 k번 뚫은 친구가 거기로 이동할 수 없도록 벽이 있는 곳은 k값으로 설정하였고 벽이 없는 곳은 아직 방문되지 않았을 때 아무나 그쪽으로 이동할 수 있도록 k보다 큰 값인 k+1로 설정하였습니다.

k번 벽을 뚫을 수 있는 문제인 벽 부수고 이동하기 2의 경우 다 맞았습니다.

거기서 이제  구조체에 아침,밤을 나타내는 멤버 f를 넣어서 아침일 때는 벽부수고이동하기1,2번 문제와 동일하게 하였고 밤일 때는 다음날이 될 때까지 이동하지 않고 그 자리에서 기다릴 수 있으므로 일단 이동하지 않은 채로 큐에 넣고 상하좌우로 벽이 아니고 나만큼 벽을 덜 뚫은 사람이 여길 방문한 적이 없다면 해당 지점으로 이동하고 큐에 넣는 걸로 하였습니다.

물론 아침에는 이동한 후 밤으로 만들어주었고 밤에는 이동한 후 아침으로 만들어주었습니다.

애초에 2번 문제에서 고친게 거의 없어 틀릴래야 틀릴 수가 없을 것 같은데 18퍼에서 계속 틀립니다.

아예 틀렸으면 모르겠는데 2번문제랑 뭐 얼마나 다르다고 저기서 틀리는지..

무슨 반례가 있을까요?

감사합니다.

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