1 minute read

dxdy 문제 기초 중의 기초..

문제:

좌표평면 위 (0, 0)에서 북쪽을 향한 상태에서 움직이는 것을 시작하려 합니다. N개의 명령에 따라 총 N번 움직이며, 명령 L이 주어지면 왼쪽으로 90도 방향 전환을, 명령 R이 주어지면 오른쪽으로 90도 방향전환을 하고, 명령 F가 주어지면 바라보고 있는 방향으로 한칸 이동하려고 합니다. 이동 이후 최종 위치를 출력하는 프로그램을 작성해보세요.

입력 형식:

첫 번째 줄에 문자 ‘L’, ‘R’, 그리고 ‘F’로만 이루어진 문자열이 하나 주어집니다.

  • 1 ≤ 명령의 길이 ≤ 100,000

출력 형식:

최종 위치 (x, y)를 공백을 사이에 두고 출력합니다.

풀이:

#include <iostream>
#include <string>
using namespace std;

int n;
int curr_dir = 3;
int x = 0;
int y = 0;
string dirString;
char dirChar;

//동 남 서 북
int dx[4] = {1,0,-1,0};
int dy[4] = {0,-1,0,1};

int main()
{
    cin >> dirString;
    for(int i = 0; i < dirString.size(); i++)
    {
        dirChar = dirString[i];
        
        if(dirChar == 'L')
            curr_dir = (curr_dir - 1 + 4) % 4;
            //3 -> 2, 2-> 1, 1-> 0, 0 -> 3

        else if(dirChar == 'R') 
            curr_dir = (curr_dir + 1) % 4;

        else
        {
            x += dx[curr_dir];
            y += dy[curr_dir];
        }

    }

    cout << x << " " << y;

		return 0;
}

노트:

연속된 n개의 Char을 계속 입력 받을 때, string으로 입력 받아 반복문에서 size() 함수를 통해 문자열의 길이만큼 반복하고, 인덱스를 통해 Char을 추출할 것.

Leave a comment