한 달 전 질문인 걸 보니 이미 해결하셨을 것 같지만 그래도 써볼게요.
큐에 {nr, nc, i}라는 노드 X가 들어가 있다고 합시다. 이 노드 X는 arrow = i에 맞게 동작할 예정입니다.
그런데 문제는 노드 X가 큐에 들어가고 난 뒤 visited 배열의 내용이 바뀔 수 있다는 것입니다.
노드 X가 큐에 들어가고 난 다음, visited 배열이 다른 방향에서 온 노드에 의해 다른 값으로 업데이트되면 문제가 발생합니다.
이미 상황은 바뀌었으나, 노드 X는 큐에서 자신의 차례가 오면 자신이 기억하는 arrow = i에 맞게 작동할 것이기 때문입니다.
이 부분을 고치면 올바르게 작동하는 코드입니다.
구조체 POS에 visited[nr][nc]을 기억하는 변수 val을 만들고 큐에 que.push({nr, nc, i, val})로 삽입한 뒤,
나중에 큐에서 꺼낼 때 visited[r][c] != cnt라면 continue해서 버리는 방법이 있을 수 있겠네요.
dudgh9661 3년 전
실패되는 테스트 케이스를 찾았으나 해당 테스트 케이스에서 왜 실패하는지 도대체 모르겠습니다ㅑ...
제 코드의 논리적 오류가 어떤 부분인지 알려주시면 정말 감사드리겠습니다. 고통스럽습니다...
다음은 실패하는 테스크 케이스입니다.
36 40
*...................................
.*..*....************************...
..*..*...*C.....................*...
......*..********************...*...
.............................*.*....
..************************..*...*...
.*.......................*.*...*...*
*..********************..*..**.*....
......................*.....*..*....
............*..........*.*.*....*...
*******************.*..**.*.....*...
..................*...*........*....
.**************...*...*.*******...*.
..............*...*...*.............
.*............*...*...*...*.........
.*.************...*...*..*.*........
**............*...*...*.*...*.......
..*...........*...*...**.....*......
...*..........*...*...*.*.....*.....
....*.........*...*...*..*..........
.....*........*...*...*...*.........
......*.......*.*.*...*....*.......*
.......*......*...*...*.....*.....*.
*************.*...*...*......*...*..
*.............*...*...*.......*.*...
*..*..*...*....*..**..*........*....
*..*.*.*.*.**.*...*...*.............
*..**...*....*....*...*.............
*..*..............*...*.............
*..*.**************...*.............
*..*..............*...*.............
**C*.............*....*.............
..*.............*.....*.............
...............*......*.............
......................*.............
......................*.............
***.***.*.*.*.***.***..*..*.*...***.
*...*.*.*.*.*.**..***..*..*.*...**..
*...*.*..*.*...**.*.*..*..*.*...*...
***.***..*.*..***.*..*.****.***.***.