BOJ 15426 GlitchBot

BOJ 15426 GlitchBot

문제 링크:

문제 내용

로봇이 좌표 평면의 원점에 북쪽(양의 yy방향)을 보고 서 있습니다. 이 로봇은 Left, Right, Forward로 구성된 프로그램에 의해 동작하며, 각각의 의미는 다음과 같습니다.

  • Forward: 현재 바라보고 있는 방향으로 1칸만큼 이동합니다.
  • Left, Right: 현재 위치에서 이동하지 않고 바라보고 있는 방향을 왼쪽 또는 오른쪽으로 90도 회전합니다.

주어진 프로그램에서 정확히 하나의 명령을 고쳐서, 프로그램이 종료되었을 때 로봇이 원하는 목표 지점에 있도록 하세요. 고치는 방법이 여러 가지라면 고친 명령의 위치가 가장 앞쪽인 것을 출력합니다. 그 위치를 고치는 방법이 유일한 입력만 주어집니다.

입력

첫 줄에는 원하는 목표 지점의 xx, yy좌표가 주어집니다. (50x,y50-50 \le x, y \le 50)

두 번째 줄에는 프로그램의 길이 nn(1n501 \le n \le 50)이 주어지고, 그다음 nn줄에는 프로그램의 명령이 순서대로 하나씩 주어집니다. 각 명령은 Left, Right, Forward 중 하나입니다.

출력

몇 번째 명령을 무엇으로 바꿔야 하는지를 한 줄에 순서대로 출력합니다.

문제 풀이

스포일러

nn이 크지 않으므로 가능한 모든 방법으로 프로그램을 바꿔 본 뒤에 그 프로그램을 실행하여 원하는 자리에 멈추는지 확인하면 됩니다.

프로그램 실행을 구현하기 위해서는 x, y, dx, dy 변수를 관리합니다. xy는 현재 위치, dxdy는 현재 바라보고 있는 방향을 나타냅니다. 각각의 명령은 다음과 같이 구현할 수 있습니다.

  • Forward 명령에서는 x += dx; y += dy를 수행합니다.
  • Left에서는 (dx, dy) = (-dy, dx)를 수행합니다.
  • Right에서는 (dx, dy) = (dy, -dx)를 수행합니다.
Last updated on