๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 14499_์ฃผ์‚ฌ์œ„ ๊ตด๋ฆฌ๊ธฐ

๋ฟŒ์•ผ._. 2022. 5. 9. 17:38

Gold IV

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/14499)

<์ฃผ์‚ฌ์œ„ ๊ตด๋ฆฌ๊ธฐ>

๋ฌธ์ œ 

 

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

 

  2
4 1 3
  5
  6

 

์ฃผ์‚ฌ์œ„๋Š” ์ง€๋„ ์œ„์— ์œ— ๋ฉด์ด 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๋กœ ์ฃผ์–ด์ง„๋‹ค.

 

 

์ถœ๋ ฅ 

 

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

 

 

๋ฌธ์ œ ํ’€์ด

   - my solution (Python)

import sys

def throw_dice(a,b,c,d,e,f):
    temp = [0, 0, 0, 0, 0, 0]
    temp[0] = dice[a]
    temp[1] = dice[b]
    temp[2] = dice[c]
    temp[3] = dice[d]
    temp[4] = dice[e]
    temp[5] = dice[f]
    return temp

if __name__=='__main__':
    n,m,x,y,k=map(int,sys.stdin.readline().split()) # ์„ธ๋กœ, ๊ฐ€๋กœ, ์ฃผ์‚ฌ์œ„ ์ขŒํ‘œ, ๋ช…๋ น ๊ฐœ์ˆ˜

    arr=[] # ์ง€๋„
    for i in range(n):
        arr.append(list(map(int,sys.stdin.readline().split())))

    command=list(map(int,sys.stdin.readline().split())) # ๋ช…๋ น

    dice=[0,0,0,0,0,0] # ์ฃผ์‚ฌ์œ„

    for i in command:
        flag=False
        if i==1: # ๋™
            if y+1<m:
                y+=1
                flag=True
                dice = throw_dice(0, 4, 2, 5, 3, 1)
        elif i==2: # ์„œ
            if y-1>=0:
                y-=1
                flag = True
                dice = throw_dice(0, 5, 2, 4, 1, 3)
        elif i==3: # ๋ถ
            if x-1>=0:
                x-=1
                flag = True
                dice = throw_dice(1, 2, 3, 0, 4, 5)
        elif i==4: # ๋‚จ
            if x+1<n:
                x+=1
                flag = True
                dice = throw_dice(3, 0, 1, 2, 4, 5)
        if flag==True:
            if arr[x][y] == 0: # ์ด๋™ํ•œ ์นธ์— ์“ฐ์—ฌ์žˆ๋Š” ์ˆ˜๊ฐ€ 0
                arr[x][y] = dice[3]
            else: # 0์ด ์•„๋‹Œ ๊ฒฝ์šฐ
                dice[3] = arr[x][y]
                arr[x][y]=0
            print(dice[1])

 

 

- my solution (JAVA)

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class _14499_์ฃผ์‚ฌ์œ„๊ตด๋ฆฌ๊ธฐ {
	static int[] throw_dice(int dice[], int a, int b, int c, int d, int e, int f){
		int temp[]= {0,0,0,0,0,0};
		temp[0]=dice[a];
		temp[1]=dice[b];
		temp[2]=dice[c];
		temp[3]=dice[d];
		temp[4]=dice[e];
		temp[5]=dice[f];
		
		return temp;
	}

	public static void main(String[] args)throws IOException {
		BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
		
		String s=bf.readLine();
		int n=Integer.parseInt(s.split(" ")[0]); // ์„ธ๋กœ
		int m=Integer.parseInt(s.split(" ")[1]); // ๊ฐ€๋กœ
		int x=Integer.parseInt(s.split(" ")[2]); // ์ฃผ์‚ฌ์œ„ ์ขŒํ‘œ
		int y=Integer.parseInt(s.split(" ")[3]);
		int k=Integer.parseInt(s.split(" ")[4]); // ๋ช…๋ น์˜ ๊ฐœ์ˆ˜
		
		int arr[][]=new int[n][m]; // ์ง€๋„
		for(int i=0; i<n; i++) {
			s=bf.readLine();
			for(int j=0; j<m; j++) {
				arr[i][j]=Integer.parseInt(s.split(" ")[j]);
			}
		}
		
		int command[]=new int[k]; // ๋ช…๋ น
		s=bf.readLine();
		for(int i=0; i<k; i++) {
			command[i]=Integer.parseInt(s.split(" ")[i]);
		}
		
		int dice[]= {0,0,0,0,0,0};
		
		for(int i=0; i<k; i++) {
			boolean flag=false;
			if(command[i]==1) { // ๋™
				if(y+1<m) {
					y+=1;
					flag=true;
					dice=throw_dice(dice, 0, 4, 2, 5, 3, 1);
				}
			}
			else if(command[i]==2) { // ์„œ
				if(y-1>=0) {
					y-=1;
					flag=true;
					dice=throw_dice(dice, 0, 5, 2, 4, 1, 3);
				}
			}
			else if(command[i]==3) { // ๋ถ
				if(x-1>=0) {
					x-=1;
					flag=true;
					dice=throw_dice(dice, 1, 2, 3, 0, 4, 5);
				}
			}
			else if(command[i]==4) { // ๋‚จ
				if(x+1<n) {
					x+=1;
					flag=true;
					dice=throw_dice(dice, 3, 0, 1, 2, 4, 5);
				}
			}
			if(flag==true) {
				if(arr[x][y]==0) {
					arr[x][y]=dice[3];
				}else {
					dice[3]=arr[x][y];
					arr[x][y]=0;
				}
				System.out.println(dice[1]);
			}
		}
	}
}

 

 

 

๋™, ์„œ, ๋ถ, ๋‚จ์œผ๋กœ ์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ ธ์„ ๋•Œ, ์ฃผ์‚ฌ์œ„์˜ ์ „๊ฐœ๋„๊ฐ€ ์ด๋™ํ•˜๋Š” ์œ„์น˜๋ฅผ ์ž˜ ํŒŒ์•…ํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•˜์—ฌ ์ฃผ์‚ฌ์œ„๋ฅผ ์ „๊ฐœ๋„๋ฅผ ๋ฆฌ์ŠคํŠธ๋กœ ์ €์žฅํ•œ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

* ํ™”์‚ดํ‘œ ๋ฐฉํ–ฅ ์ฃผ์˜

 

1. ๋™

 

 

2. ์„œ

 

 

3. ๋ถ

 

 

4. ๋‚จ

 

 

 

  • throw_dice
    : ๊ฐ ๋ฐฉํ–ฅ์œผ๋กœ ์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ ธ์„ ๋•Œ ์ฃผ์‚ฌ์œ„ ์ „๊ฐœ๋„๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜
  • Main
    : ์ง€๋„์˜ ์„ธ๋กœ, ๊ฐ€๋กœ, ์ฃผ์‚ฌ์œ„ ์ขŒํ‘œ, ๋ช…๋ น ๊ฐœ์ˆ˜ ์ž…๋ ฅ
    : arr (์ง€๋„) ์ •๋ณด ์ž…๋ ฅ
    : command (๋ช…๋ น) ์ž…๋ ฅ
    : dice = ์ฃผ์‚ฌ์œ„ ์ „๊ฐœ๋„ ์ •๋ณด ์ €์žฅ
    : ๋ช…๋ น๋Œ€๋กœ ์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ ค ๋™, ์„œ, ๋ถ, ๋‚จ์ผ ๋•Œ ์ขŒํ‘œ๋ฅผ ๊ตฌํ•œ ํ›„ ์ง€๋„์˜ ๋ฒ”์œ„ ์•ˆ์ด๋ผ๋ฉด ์ฃผ์‚ฌ์œ„๊ฐ€ ๊ตด๋ ค์ง„ ๋Œ€๋กœ ์ „๊ฐœ๋„๋ฅผ ์ €์žฅํ•ด์ฃผ๋ฉฐ ์ด๋™ํ•œ ์นธ์— ์“ฐ์—ฌ์žˆ๋Š” ์ˆ˜๊ฐ€ 0์ด๋ฉด ์ฃผ์‚ฌ์œ„์˜ ๋ฐ”๋‹ฅ๋ฉด์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๋ฅผ ๋ณต์‚ฌ, 0์ด ์•„๋‹ˆ๋ฉด ์ง€๋„์˜ ์นธ์— ์žˆ๋Š” ์ˆ˜๋ฅผ ์ฃผ์‚ฌ์œ„ ๋ฐ”๋‹ฅ ๋ฉด์œผ๋กœ ๋ณต์‚ฌ ํ›„ ์นธ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๋ฅผ 0์œผ๋กœ ์ €์žฅ

 


์ƒ๊ฐ๐Ÿค”

 

์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ ธ์„ ๋•Œ ์ „๊ฐœ๋„๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ธˆ๋ฐฉ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค.