05-16 00:01
Recent Posts
Recent Comments
๊ด€๋ฆฌ ๋ฉ”๋‰ด

miinsun

[BAEKJOON] ๋ฐฑ์ค€ ๊ตฌํ˜„ 14499 :: ์ฃผ์‚ฌ์œ„ ๊ตด๋ฆฌ๊ธฐ ๋ณธ๋ฌธ

Algorithm/Baekjoon

[BAEKJOON] ๋ฐฑ์ค€ ๊ตฌํ˜„ 14499 :: ์ฃผ์‚ฌ์œ„ ๊ตด๋ฆฌ๊ธฐ

miinsun 2022. 7. 15. 01:48

๐Ÿ’ฌ  ๋ฌธ์ œ ์„ค๋ช…

ํฌ๊ธฐ๊ฐ€ N×M์ธ ์ง€๋„๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ง€๋„์˜ ์˜ค๋ฅธ์ชฝ์€ ๋™์ชฝ, ์œ„์ชฝ์€ ๋ถ์ชฝ์ด๋‹ค. ์ด ์ง€๋„์˜ ์œ„์— ์ฃผ์‚ฌ์œ„๊ฐ€ ํ•˜๋‚˜ ๋†“์—ฌ์ ธ ์žˆ์œผ๋ฉฐ, ์ฃผ์‚ฌ์œ„์˜ ์ „๊ฐœ๋„๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ์ง€๋„์˜ ์ขŒํ‘œ๋Š” (r, c)๋กœ ๋‚˜ํƒ€๋‚ด๋ฉฐ, r๋Š” ๋ถ์ชฝ์œผ๋กœ๋ถ€ํ„ฐ ๋–จ์–ด์ง„ ์นธ์˜ ๊ฐœ์ˆ˜, c๋Š” ์„œ์ชฝ์œผ๋กœ๋ถ€ํ„ฐ ๋–จ์–ด์ง„ ์นธ์˜ ๊ฐœ์ˆ˜์ด๋‹ค.
์ฃผ์‚ฌ์œ„๋Š” ์ง€๋„ ์œ„์— ์œ— ๋ฉด์ด 1์ด๊ณ , ๋™์ชฝ์„ ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์ด 3์ธ ์ƒํƒœ๋กœ ๋†“์—ฌ์ ธ ์žˆ์œผ๋ฉฐ, ๋†“์—ฌ์ ธ ์žˆ๋Š” ๊ณณ์˜ ์ขŒํ‘œ๋Š” (x, y) ์ด๋‹ค. ๊ฐ€์žฅ ์ฒ˜์Œ์— ์ฃผ์‚ฌ์œ„์—๋Š” ๋ชจ๋“  ๋ฉด์— 0์ด ์ ํ˜€์ ธ ์žˆ๋‹ค.

์ง€๋„์˜ ๊ฐ ์นธ์—๋Š” ์ •์ˆ˜๊ฐ€ ํ•˜๋‚˜์”ฉ ์“ฐ์—ฌ์ ธ ์žˆ๋‹ค. ์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ ธ์„ ๋•Œ, ์ด๋™ํ•œ ์นธ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๊ฐ€ 0์ด๋ฉด, ์ฃผ์‚ฌ์œ„์˜ ๋ฐ”๋‹ฅ๋ฉด์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๊ฐ€ ์นธ์— ๋ณต์‚ฌ๋œ๋‹ค. 0์ด ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” ์นธ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๊ฐ€ ์ฃผ์‚ฌ์œ„์˜ ๋ฐ”๋‹ฅ๋ฉด์œผ๋กœ ๋ณต์‚ฌ๋˜๋ฉฐ, ์นธ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๋Š” 0์ด ๋œ๋‹ค.

์ฃผ์‚ฌ์œ„๋ฅผ ๋†“์€ ๊ณณ์˜ ์ขŒํ‘œ์™€ ์ด๋™์‹œํ‚ค๋Š” ๋ช…๋ น์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ฃผ์‚ฌ์œ„๊ฐ€ ์ด๋™ํ–ˆ์„ ๋•Œ ๋งˆ๋‹ค ์ƒ๋‹จ์— ์“ฐ์—ฌ ์žˆ๋Š” ๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ฃผ์‚ฌ์œ„๋Š” ์ง€๋„์˜ ๋ฐ”๊นฅ์œผ๋กœ ์ด๋™์‹œํ‚ฌ ์ˆ˜ ์—†๋‹ค. ๋งŒ์•ฝ ๋ฐ”๊นฅ์œผ๋กœ ์ด๋™์‹œํ‚ค๋ ค๊ณ  ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น ๋ช…๋ น์„ ๋ฌด์‹œํ•ด์•ผ ํ•˜๋ฉฐ, ์ถœ๋ ฅ๋„ ํ•˜๋ฉด ์•ˆ ๋œ๋‹ค.

๐Ÿ”จ  ์ž…์ถœ๋ ฅ ์˜ˆ

์ž…๋ ฅ 

  •  ์ฒซ์งธ ์ค„์— ์ง€๋„์˜ ์„ธ๋กœ ํฌ๊ธฐ N, ๊ฐ€๋กœ ํฌ๊ธฐ M (1 ≤ N, M ≤ 20), ์ฃผ์‚ฌ์œ„๋ฅผ ๋†“์€ ๊ณณ์˜ ์ขŒํ‘œ x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), ๊ทธ๋ฆฌ๊ณ  ๋ช…๋ น์˜ ๊ฐœ์ˆ˜ K (1 ≤ K ≤ 1,000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
  • ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ์ง€๋„์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๊ฐ€ ๋ถ์ชฝ๋ถ€ํ„ฐ ๋‚จ์ชฝ์œผ๋กœ, ๊ฐ ์ค„์€ ์„œ์ชฝ๋ถ€ํ„ฐ ๋™์ชฝ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์‚ฌ์œ„๋ฅผ ๋†“์€ ์นธ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๋Š” ํ•ญ์ƒ 0์ด๋‹ค. ์ง€๋„์˜ ๊ฐ ์นธ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๋Š” 10 ๋ฏธ๋งŒ์˜ ์ž์—ฐ์ˆ˜ ๋˜๋Š” 0์ด๋‹ค.
  • ๋งˆ์ง€๋ง‰ ์ค„์—๋Š” ์ด๋™ํ•˜๋Š” ๋ช…๋ น์ด ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋™์ชฝ์€ 1, ์„œ์ชฝ์€ 2, ๋ถ์ชฝ์€ 3, ๋‚จ์ชฝ์€ 4๋กœ ์ฃผ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ

  • ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ์ฃผ์‚ฌ์œ„์˜ ์œ— ๋ฉด์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ๋ฐ”๊นฅ์œผ๋กœ ์ด๋™์‹œํ‚ค๋ ค๊ณ  ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น ๋ช…๋ น์„ ๋ฌด์‹œํ•ด์•ผ ํ•˜๋ฉฐ, ์ถœ๋ ฅ๋„ ํ•˜๋ฉด ์•ˆ ๋œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ 1)

4 2 0 0 8
0 2
3 4
5 6
7 8
4 4 4 1 3 3 3 2

 

์˜ˆ์ œ ์ถœ๋ ฅ 1)

0
0
3
0
0
8
6
3

 

์˜ˆ์ œ ์ž…๋ ฅ 2)

3 3 1 1 9
1 2 3
4 0 5
6 7 8
1 3 2 2 4 4 1 1 3

 

์˜ˆ์ œ ์ถœ๋ ฅ 2)

0
0
0
3
0
1
0
6
0

โ€‹

์˜ˆ์ œ ์ž…๋ ฅ 3)

2 2 0 0 16
0 2
3 4
4 4 4 4 1 1 1 1 3 3 3 3 2 2 2 2

 

์˜ˆ์ œ ์ถœ๋ ฅ 3)

0
0
0
0

 

์˜ˆ์ œ ์ž…๋ ฅ 4)

3 3 0 0 16
0 1 2
3 4 5
6 7 8
4 4 1 1 3 3 2 2 4 4 1 1 3 3 2 2

 

์˜ˆ์ œ ์ถœ๋ ฅ 4)

0
0
0
6
0
8
0
2
0
8
0
2
0
8
0
2

 

โ€‹

๐Ÿ’ป  Main.java

๊ตฌํ˜„์€ ๋Š˜ ์–ด๋ ต๊ณ  ์ƒˆ๋กœ์›Œ๋ผ,, ์ด๋ฒˆ ๋ฌธ์ œ๋Š” ์ฃผ์‚ฌ์œ„๋ฅผ ์–ด๋–ค์‹์œผ๋กœ ์›€์ง์ด๋Š” ์ง€๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๋‹ค๋ฅธ ๋ถ€๋ถ„์€ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

  • ์ฃผ์‚ฌ์œ„๋ฅผ ๋™์ชฝ์œผ๋กœ ์›€์ง์ผ๋•Œ๋ฅผ ์˜ˆ๋ฅผ ๋“ค์–ด
    • ์ฃผ์‚ฌ์œ„๋ฅผ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด๋กœ ์ƒ๊ฐํ–ˆ์„ ๋•Œ,
    • dice[0]์˜ ์œ„์น˜์—๋Š” dice[3]์ด ์˜ค๊ณ , dice[3]์˜ ์œ„์น˜์—๋Š” dice[5]๊ฐ€ dice[5]์—๋Š” dice[2]๊ฐ€ ์˜ค๊ฒŒ๋˜๋ฉฐ dice[2]์—๋Š” dice[0]์ด ๋œ๋‹ค.
    • ์ด๋•Œ dice[0]์€ dice[3]์œผ๋กœ ๊ฐฑ์‹  ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ์ €์žฅํ•ด๋‘ฌ์•ผํ•œ๋‹ค.
  • ๋™์ชฝ์™ธ์˜ ๋‹ค๋ฅธ ๋ฐฉํ–ฅ๋„ ์ด์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ด๋™ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
  • ์ฃผ์‚ฌ์œ„์˜ ์ƒ๋‹จ์€ ํ•ญ์ƒ dice[0]์ด๊ณ  ๋ฐ‘๋ฉด์€ ํ•ญ์ƒ dice[5]์ธ ๊ฒƒ์„ ์ฐธ๊ณ ํ•ด์„œ ์ง€๋„์™€ ์ฃผ์‚ฌ์œ„ ๊ฐ’์„ ๋ณต์‚ฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

<์ „์ฒด ์ฝ”๋“œ>

import java.util.*;

public class Main {
    static int[] dx = {0, 0, -1, 1};
    static int[] dy = {1, -1, 0, 0};
    static int[] dice = new int[6];
    static int[][] board;

    static void copyMap(int x, int y){
        if(board[x][y] == 0){
            board[x][y] = dice[5];
        }
        else{
            dice[5] = board[x][y];
            board[x][y] = 0;
        }
    }

    static void moveDice(int cmd){
        int tmp = dice[0];
        switch (cmd){
            // ๋™์ชฝ์ด๋™
            case 1:
                dice[0] = dice[3];
                dice[3] = dice[5];
                dice[5] = dice[2];
                dice[2] = tmp;
                break;
            // ์„œ์ชฝ์ด๋™
            case 2:
                dice[0] = dice[2];
                dice[2] = dice[5];
                dice[5] = dice[3];
                dice[3] = tmp;
                break;
            // ๋ถ์ชฝ์ด๋™
            case 3:
                dice[0] = dice[4];
                dice[4] = dice[5];
                dice[5] = dice[1];
                dice[1] = tmp;
                break;
            // ๋‚จ์ชฝ์ด๋™
            case 4:
                dice[0] = dice[1];
                dice[1] = dice[5];
                dice[5] = dice[4];
                dice[4] = tmp;
                break;
        }
    }
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();   // ์ง€๋„์˜ ์„ธ๋กœ ํฌ๊ธฐ
        int m = sc.nextInt();   // ์ง€๋„์˜ ๊ฐ€๋กœ ํฌ๊ธฐ
        int x = sc.nextInt();   // ์ฃผ์‚ฌ์œ„์˜ ์ขŒํ‘œ
        int y = sc.nextInt();
        int k = sc.nextInt();   // ๋ช…๋ น์˜ ๊ฐœ์ˆ˜

        // ์ง€๋„ ์ž…๋ ฅ
        board = new int[n][m];
        for(int i = 0; i < n; i++){
            for(int j = 0; j < m; j++){
                board[i][j] = sc.nextInt();
            }
        }

        // ๋ช…๋ น ์‹คํ–‰
        for(int i = 0; i < k; i++){
            // ๋™์ชฝ์€ 1, ์„œ์ชฝ์€ 2, ๋ถ์ชฝ์€ 3, ๋‚จ์ชฝ์€ 4
            int cmd = sc.nextInt();

            int nx = x + dx[cmd - 1];
            int ny = y + dy[cmd - 1];

            // ๊ฒฝ๊ณ„๊ฐ’ ๊ฒ€์‚ฌ
            if(nx >= n || nx < 0 || ny >= m || ny < 0)
                continue;

            // ์ฃผ์‚ฌ์œ„ ์ด๋™
           moveDice(cmd);

            // ์ฃผ์‚ฌ์œ„ & ์ง€๋„ ๊ฐ’ ๋ณต์‚ฌ
            copyMap(nx, ny);

            sb.append(dice[0]).append('\n');

            // ์ฃผ์‚ฌ์œ„์˜ ์ขŒํ‘œ ๊ฐฑ์‹ 
            x = nx;
            y = ny;
        }

        System.out.print(sb);
    }
}
Comments