N x N 격자 미로에서 오른쪽 벽을 짚고 이동하여 탈출하는 시뮬레이션 문제.
- 시작 위치와 초기 방향(우측)이 주어지며, 벽의 상태에 따라 방향을 바꾸거나 이동함.
- 탈출 조건: 격자 밖으로 나가면 탈출 성공.
- 실패 조건: 같은 위치와 방향을 반복하면 탈출 불가능.
핵심 아이디어
- 벽을 짚고 이동하는 3가지 주요 규칙에 따라 이동 로직을 구현한다.
- 전방이 벽이면 반시계 방향으로 90도 회전
- 전방이 격자 밖이면 탈출
- 전방 이동 가능 → 오른쪽에 벽 있음: 이동, 없으면 2칸 이동 후 시계 방향 90도 회전
- 무한 루프 방지를 위해
(위치, 방향) 상태를 방문 기록으로 관리하여 동일한 상태 재방문 시 탈출 불가능 판단
핵심 로직 요약
if (visited[x][y][dir])
return -1;
visited[x][y][dir] = true;
if (전방이 벽) dir = 반시계;
else if (전방이 격자 밖) 탈출;
else {
if (전방+우측에 벽) → 1칸 이동;
else → 2칸 이동 + 시계방향 90도 회전;
}
탈출 불가능 판단 핵심
visited[x][y][dir]로 상태 반복 여부를 감지
- 해당 상태가 재방문되면 사이클 발생으로 탈출 불가 →
System.exit(0)으로 -1 출력