ingus kinematics 2022. 10. 30. 16:20

https://velog.io/@ch9eri/%EA%B5%AC%ED%98%84-%EC%83%81%ED%95%98%EC%A2%8C%EC%9A%B0

 

[구현] 상하좌우 예제 / 백준 16926 배열돌리기

https://media.vlpt.us/images/suzieep/post/7de8ffd0-d536-4fbe-b5a5-f5fb4ce13258/image.png!\[](https://images.velog.io/images/ch9eri/post/a069

velog.io

#include <iostream>

using namespace std;

enum MOVE{
    MOVE_LEFT,
    MOVE_UP,
    MOVE_RIGHT,
    MOVE_DOWN,
};

int main()
{
    // 왼, 위, 오, 아
    int dx[4] = {0, -1, 0, 1};
    int dy[4] = {-1, 0, 1, 0};

    int N = 0;

    cin >> N;

    string plans;

    cin.ignore(); // 버퍼 비우기
    getline(cin, plans);

    cout << "plans = " << plans << endl;
    cout << "plans.length() = " << plans.length() << endl;

    int cur_x = 0, cur_y = 0;

    // Move
    for(int i=0; i<plans.length(); i++)
    {
        if(i % 2 == 0)
        {
            if(plans[i] == 'L')
            {
                cur_x += dx[MOVE_LEFT];
                cur_y += dy[MOVE_LEFT];
            }
            else if(plans[i] == 'U')
            {
                cur_x += dx[MOVE_UP];
                cur_y += dy[MOVE_UP];
            }
            else if(plans[i] == 'R')
            {
                cur_x += dx[MOVE_RIGHT];
                cur_y += dy[MOVE_RIGHT];
            }
            else if(plans[i] == 'D')
            {
                cur_x += dx[MOVE_DOWN];
                cur_y += dy[MOVE_DOWN];
            }

            // Limit - X
            if(cur_x < 0)
                cur_x = 0;
            else if(cur_x > N)
                cur_x = N-1;

            if(cur_y < 0)
                cur_y = 0;
            else if(cur_y > N)
                cur_y = N-1;
        }
    }

    cout << "==================" << endl;
    cout << "cur_x = " << (cur_x + 1) << endl;
    cout << "cur_y = " << (cur_y + 1) << endl;

    return 0;
}