BOJ 15426 GlitchBot
BOJ 15426 GlitchBot
문제 내용
로봇이 좌표 평면의 원점에 북쪽(양의 방향)을 보고 서 있습니다. 이 로봇은 Left, Right, Forward로 구성된 프로그램에 의해 동작하며, 각각의 의미는 다음과 같습니다.
Forward: 현재 바라보고 있는 방향으로 1칸만큼 이동합니다.Left,Right: 현재 위치에서 이동하지 않고 바라보고 있는 방향을 왼쪽 또는 오른쪽으로 90도 회전합니다.
주어진 프로그램에서 정확히 하나의 명령을 고쳐서, 프로그램이 종료되었을 때 로봇이 원하는 목표 지점에 있도록 하세요. 고치는 방법이 여러 가지라면 고친 명령의 위치가 가장 앞쪽인 것을 출력합니다. 그 위치를 고치는 방법이 유일한 입력만 주어집니다.
입력
첫 줄에는 원하는 목표 지점의 , 좌표가 주어집니다. ()
두 번째 줄에는 프로그램의 길이 ()이 주어지고, 그다음 줄에는 프로그램의 명령이 순서대로 하나씩 주어집니다. 각 명령은 Left, Right, Forward 중 하나입니다.
출력
몇 번째 명령을 무엇으로 바꿔야 하는지를 한 줄에 순서대로 출력합니다.
문제 풀이
스포일러
이 크지 않으므로 가능한 모든 방법으로 프로그램을 바꿔 본 뒤에 그 프로그램을 실행하여 원하는 자리에 멈추는지 확인하면 됩니다.
프로그램 실행을 구현하기 위해서는 x, y, dx, dy 변수를 관리합니다. x와 y는 현재 위치, dx와 dy는 현재 바라보고 있는 방향을 나타냅니다. 각각의 명령은 다음과 같이 구현할 수 있습니다.
Forward명령에서는x += dx; y += dy를 수행합니다.Left에서는(dx, dy) = (-dy, dx)를 수행합니다.Right에서는(dx, dy) = (dy, -dx)를 수행합니다.
Last updated on