벽 짚고 미로 탈출하기

JunHyeok Seo·2025년 5월 17일

algorithm

목록 보기
24/30

문제 개요

  • N x N 격자 미로에서 오른쪽 벽을 짚고 이동하여 탈출하는 시뮬레이션 문제.
  • 시작 위치와 초기 방향(우측)이 주어지며, 벽의 상태에 따라 방향을 바꾸거나 이동함.
  • 탈출 조건: 격자 밖으로 나가면 탈출 성공.
  • 실패 조건: 같은 위치와 방향을 반복하면 탈출 불가능.

핵심 아이디어

  • 벽을 짚고 이동하는 3가지 주요 규칙에 따라 이동 로직을 구현한다.
    1. 전방이 벽이면 반시계 방향으로 90도 회전
    2. 전방이 격자 밖이면 탈출
    3. 전방 이동 가능 → 오른쪽에 벽 있음: 이동, 없으면 2칸 이동 후 시계 방향 90도 회전
  • 무한 루프 방지를 위해 (위치, 방향) 상태를 방문 기록으로 관리하여 동일한 상태 재방문 시 탈출 불가능 판단

핵심 로직 요약

if (visited[x][y][dir]) // 이전에 같은 상태 방문: 탈출 불가능
    return -1;

visited[x][y][dir] = true;

if (전방이 벽) dir = 반시계;
else if (전방이 격자 밖) 탈출;
else {
    if (전방+우측에 벽)1칸 이동;
    else2칸 이동 + 시계방향 90도 회전;
}

탈출 불가능 판단 핵심

  • visited[x][y][dir]로 상태 반복 여부를 감지
  • 해당 상태가 재방문되면 사이클 발생으로 탈출 불가 → System.exit(0)으로 -1 출력

0개의 댓글