본문 바로가기
공부/알고리즘, 백준

백준 28295번 C++

by Excidus 2023. 7. 2.

아이디어: 4로 나눈 나머지를 구하는 이유는 방향을 나타내는 숫자가 0에서 3 사이의 값이어야 하기 때문입니다. 즉, 방향은 북쪽(0), 동쪽(1), 남쪽(2), 서쪽(3)으로 순환됩니다.

예를 들어, 현재 방향이 북쪽(0)이고 지시가 오른쪽으로 돌기(1)라면 새로운 방향은 동쪽(1)이 됩니다. 이는 **(0 + 1) % 4**로 계산할 수 있습니다. 마찬가지로, 현재 방향이 동쪽(1)이고 지시가 오른쪽으로 돌기(1)라면 새로운 방향은 남쪽(2)이 됩니다. 이는 **(1 + 1) % 4**로 계산할 수 있습니다.

따라서 4로 나눈 나머지를 구하는 것은 방향을 나타내는 숫자가 0에서 3 사이의 값이 되도록 하기 위한 것입니다.

**current_direction + 1**을 하는 이유는 지시가 오른쪽으로 돌기(1)일 때 학생들이 현재 바라보고 있는 방향에서 오른쪽으로 90도 돌아야 하기 때문입니다.

방향을 나타내는 숫자는 북쪽(0), 동쪽(1), 남쪽(2), 서쪽(3)으로 순환됩니다. 따라서 현재 방향에서 오른쪽으로 90도 돌면 다음 방향이 됩니다. 예를 들어, 현재 방향이 북쪽(0)이고 지시가 오른쪽으로 돌기(1)라면 새로운 방향은 동쪽(1)이 됩니다. 이는 **current_direction + 1**로 계산할 수 있습니다.

따라서 **current_direction + 1**을 하는 것은 지시가 오른쪽으로 돌기(1)일 때 학생들이 현재 바라보고 있는 방향에서 오른쪽으로 90도 돌아 새로운 방향을 결정하기 위한 것입니다.

**t**는 코드에서 입력받은 지시를 나타내는 변수입니다. **t**의 값은 1, 2, 3 중 하나로, 각각 우향우, 뒤로 돌아, 좌향좌를 나타냅니다.

예를 들어, **t**의 값이 1이면 지시가 우향우임을 나타내고, 학생들은 현재 상태에서 오른쪽으로 90도 돌아야 합니다. **t**의 값이 2이면 지시가 뒤로 돌아임을 나타내고, 학생들은 현재 상태에서 오른쪽으로 180도 돌아야 합니다. **t**의 값이 3이면 지시가 좌향좌임을 나타내고, 학생들은 현재 상태에서 왼쪽으로 90도 돌아야 합니다.

따라서 **t**는 코드에서 입력받은 지시를 나타내는 변수입니다.

**directions[current_direction]**은 학생들이 마지막으로 바라보는 방향을 나타내는 문자를 출력하기 위한 코드입니다.

**directions**는 크기가 4인 문자 배열로, 각각 북쪽, 동쪽, 남쪽, 서쪽을 나타내는 문자(N, E, S, W)를 저장합니다. **current_direction**은 학생들이 현재 바라보고 있는 방향을 나타내는 변수로, 0에서 3 사이의 값입니다.

따라서 **directions[current_direction]**은 학생들이 마지막으로 바라보는 방향을 나타내는 문자를 의미합니다. 예를 들어, **current_direction**의 값이 0이면 학생들이 마지막으로 북쪽을 바라보고 있으므로 **directions[current_direction]**은 N이 됩니다. 마찬가지로, **current_direction**의 값이 1이면 학생들이 마지막으로 동쪽을 바라보고 있으므로 **directions[current_direction]**은 E가 됩니다.

따라서 **directions[current_direction]**은 학생들이 마지막으로 바라보는 방향을 나타내는 문자를 출력하기 위한 코드입니다.

 

 

#include <iostream>
using namespace std;

int main() {
    int t;
    int direction = 0; // 초기 방향은 북쪽 (0: N, 1: E, 2: S, 3: W)
    for (int i = 0; i < 10; i++) {
        cin >> t;
        if (t == 1) { // 우향우
            direction = (direction + 1) % 4;
        } else if (t == 2) { // 뒤로 돌아
            direction = (direction + 2) % 4;
        } else if (t == 3) { // 좌향좌
            direction = (direction + 3) % 4;
        }
    }
    if (direction == 0) { // 북쪽
        cout << "N";
    } else if (direction == 1) { // 동쪽
        cout << "E";
    } else if (direction == 2) { // 남쪽
        cout << "S";
    } else if (direction == 3) { // 서쪽
        cout << "W";
    }
    return 0;
}

'공부 > 알고리즘, 백준' 카테고리의 다른 글

알고리즘 tip - for문에서의 <,>  (0) 2023.07.03
백준 2711번 C++  (2) 2023.07.02
백준 25311 UCPC에서 가장 쉬운 문제 번호는? C++  (0) 2023.06.28
백준 12100 2048(easy) 파이썬  (0) 2023.04.01
백준 18108번 c++  (0) 2023.02.27