블로그 이미지

suddiyo


꾸준히 기록하고 성장하는 백엔드 개발자 💻
Today
-
Yesterday
-
Total
-

ABOUT ME

-

  • [C++] 백준 14499 | 주사위 굴리기
    Problem Solving/Baekjoon 2023. 4. 8. 17:36

    주사위 굴리기

     

    14499번: 주사위 굴리기

    첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지

    www.acmicpc.net


    ✍🏻 풀이

    단순 구현 문제였다. 연습장에 주사위를 그려가며 풀면 간단하게 해결할 수 있음 😀

     

    1. 주사위 배열을 선언한 후, 다음과 같이 임의로 인덱스에 위치를 부여하였다.

    * 0: 위
    * 1: 뒤
    * 2: 아래
    * 3: 앞
    * 4: 왼쪽
    * 5: 오른쪽

     

    2. 주사위를 동, 서, 남, 북으로 굴렸을 때의 위치를 각각 함수로 구현하였다. (아래는 동쪽으로 굴렸을 때의 함수)

    void rollEast() {
        int tmp = dice[0];
        dice[0] = dice[4];
        dice[4] = dice[2];
        dice[2] = dice[5];
        dice[5] = tmp;
    }

     

    3. 명령이 들어오면 동, 서, 남, 북으로 굴려주고 아래와 같은 공통 로직을 실행한다.

    (* 문제에서 1, 2, 3, 4에 맞는 명령은 동, 서, 남, 북이 아니고 동, 서, 북, 남인 점을 주의해야 한다)

    if (diceMap[x][y] == 0) {
        diceMap[x][y] = dice[2];
    } else {
        dice[2] = diceMap[x][y];
        diceMap[x][y] = 0;
    }
    cout << dice[0] << '\n';

     

    끝!


    ✅ Accept Code

    #include <bits/stdc++.h>
    
    using namespace std;
    
    int N, M, x, y, K;
    int dice[6];
    int diceMap[20][20];
    
    /*
     * 0: 위
     * 1: 뒤
     * 2: 아래
     * 3: 앞
     * 4: 왼쪽
     * 5: 오른쪽
     */
    
    void rollEast() {
        int tmp = dice[0];
        dice[0] = dice[4];
        dice[4] = dice[2];
        dice[2] = dice[5];
        dice[5] = tmp;
    }
    
    void rollWest() {
        int tmp = dice[0];
        dice[0] = dice[5];
        dice[5] = dice[2];
        dice[2] = dice[4];
        dice[4] = tmp;
    }
    
    void rollSouth() {
        int tmp = dice[0];
        dice[0] = dice[1];
        dice[1] = dice[2];
        dice[2] = dice[3];
        dice[3] = tmp;
    }
    
    void rollNorth() {
        int tmp = dice[0];
        dice[0] = dice[3];
        dice[3] = dice[2];
        dice[2] = dice[1];
        dice[1] = tmp;
    }
    
    
    int main() {
    
        cin >> N >> M >> x >> y >> K;
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < M; j++) {
                cin >> diceMap[i][j];
            }
        }
    
        while (K--) {
            int op;
            cin >> op;
            switch (op) {
                case 1:
                    if (y + 1 > M - 1) continue;
                    rollEast();
                    y++;
                    if (diceMap[x][y] == 0) {
                        diceMap[x][y] = dice[2];
                    } else {
                        dice[2] = diceMap[x][y];
                        diceMap[x][y] = 0;
                    }
                    cout << dice[0] << '\n';
                    break;
    
                case 2:
                    if (y - 1 < 0) continue;
                    rollWest();
                    y--;
                    if (diceMap[x][y] == 0) {
                        diceMap[x][y] = dice[2];
                    } else {
                        dice[2] = diceMap[x][y];
                        diceMap[x][y] = 0;
                    }
                    cout << dice[0] << '\n';
                    break;
    
                case 3:
                    if (x - 1 < 0) continue;
                    rollNorth();
                    x--;
                    if (diceMap[x][y] == 0) {
                        diceMap[x][y] = dice[2];
                    } else {
                        dice[2] = diceMap[x][y];
                        diceMap[x][y] = 0;
                    }
                    cout << dice[0] << '\n';
                    break;
    
                case 4:
                    if (x + 1 > N - 1) continue;
                    rollSouth();
                    x++;
                    if (diceMap[x][y] == 0) {
                        diceMap[x][y] = dice[2];
                    } else {
                        dice[2] = diceMap[x][y];
                        diceMap[x][y] = 0;
                    }
                    cout << dice[0] << '\n';
                    break;
            }
        }
    }
    728x90

    댓글

Designed by Tistory.