๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[๋ฐฑ์ค€ ์Šคํ„ฐ๋”” 11์ฃผ์ฐจ] 14499๋ฒˆ ์ฃผ์‚ฌ์œ„ ๊ตด๋ฆฌ๊ธฐ ๊ณจ๋“œ4 - ์ž๋ฐ”(JAVA) / ์‹œ๋ฎฌ๋ ˆ์ด์…˜

๐Ÿ“‘ ๋ฌธ์ œ

https://www.acmicpc.net/problem/14499

 

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

๋”๋ณด๊ธฐ
๋”๋ณด๊ธฐ

๋ฌธ์ œ

ํฌ๊ธฐ๊ฐ€ 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๋กœ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

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

 

 

 

 

 

 

 

 

โœ’๏ธ ํ’€์ด

 ํ•œ ๋ฒˆ ํ’€์–ด๋‘๊ณ  ๋‚˜๋ฉด, ๊ทธ ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ์‰ฝ๊ฒŒ ํ’€์–ด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์œ ํ˜•์ด๋‹ค.

 ์ฃผ์‚ฌ์œ„๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตด๋ฆฌ๋Š๋ƒ?๊ฐ€ ๊ด€๊ฑด์ด๋‹ค.

 ์‚ฌ์‹ค ํ›จ์”ฌ ๋” ์œ ์šฉํ•˜๊ณ  ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๊ฐ€ ์žˆ์ง€๋งŒ, ๋‚˜๋Š” ์•„๋ž˜ ์ฝ”๋“œ๊ฐ€ ๋” ์ง๊ด€์ ์œผ๋กœ ์™€๋‹ฟ์•„์„œ ์ €๋ ‡๊ฒŒ ํ’€์—ˆ๋‹ค. ๋ฐ”๋กœ, ํŠน์ • ๋ฐฉํ–ฅ์œผ๋กœ ๊ตด๋ ธ์„ ๋•Œ ๋ฐ”๋€Œ๋Š” 4๋ฉด์„ ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. (๋‘ ๋ฉด์€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค)

 ์˜ˆ๋ฅผ ๋“ค์–ด ์ฃผ์‚ฌ์œ„๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ตด๋ ธ์„ ๋•Œ, ํ˜„์žฌ ์˜ค๋ฅธ์ชฝ ๋ฉด์˜ ๊ฐ’์€ ๋ฐ”๋‹ฅ ๋ฉด์˜ ๊ฐ’์œผ๋กœ ๊ฐ€๊ณ , ๋ฐ”๋‹ฅ ๋ฉด์˜ ๊ฐ’์€ ์™ผ์ชฝ ๋ฉด์˜ ๊ฐ’์œผ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.

 

โœ”๏ธ ์ •๋ฆฌ

 1. ์ž…๋ ฅ๋œ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™์ด ๊ฐ€๋Šฅํ•œ์ง€ ์ฒดํฌํ•œ๋‹ค. (ArrayOutOfBound)

 2. ์ด๋™์ด ๊ฐ€๋Šฅํ•˜๋ฉด, ํ•ด๋‹น ๋ฐฉํ–ฅ์œผ๋กœ ์ฃผ์‚ฌ์œ„๋ฅผ ๊ตด๋ ธ์„ ๋•Œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์œผ๋กœ 4๋ฉด์„ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.

 3. ์—…๋ฐ์ดํŠธ ๋œ ๋ฐ”๋‹ฅ๊ฐ’์„ ๋ฐ”ํƒ•์œผ๋กœ ์กฐ๊ฑด ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 4. ์ด๋™ํ•œ ์œ„์น˜๋ฅผ ํ˜„์žฌ ์œ„์น˜๋กœ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.

 5. ์—…๋ฐ์ดํŠธ ๋œ ์œ—๋ฉด์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

 

 

 

 

 

 

 

๐Ÿ’ป ์†Œ์Šค์ฝ”๋“œ: ์ž๋ฐ”(Java)

public class Main_๋ฐฑ์ค€_14499_์ฃผ์‚ฌ์œ„๊ตด๋ฆฌ๊ธฐ_๊ณจ๋“œIV {

	// 1:๋™, 2:์„œ, 3:๋ถ, 4:๋‚จ
	static int[] dx = {0, 0, 0, -1, 1};
	static int[] dy = {0, 1, -1, 0, 0};
	static int TOP = 0;
	static int BOTTOM = 0;
	static int UP = 0;
	static int DOWN = 0;
	static int LEFT = 0;
	static int RIGHT = 0;
	
	// a๊ฐ€ ๋ฐ”๋‹ฅ์ผ ๋•Œ ์ƒ๋‹จ b์˜ ๊ฐ’: |7-a| 
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int N = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());
		int x = Integer.parseInt(st.nextToken());
		int y = Integer.parseInt(st.nextToken());
		int K = Integer.parseInt(st.nextToken());
		
		int[][] map = new int[N][M];
		for (int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine());
			for (int j = 0; j < M; j++) {
				map[i][j] = Integer.parseInt(st.nextToken());
			}
		}//input
		
		st = new StringTokenizer(br.readLine());
		int nx, ny;
		for (int i = 0; i < K; i++) {	// ์—ฐ์‚ฐ์˜ ํšŸ์ˆ˜
			int d = Integer.parseInt(st.nextToken());
			nx = x + dx[d];
			ny = y + dy[d];
			// ๊ตฌ๋ฅผ ์ˆ˜ ์—†๋Š” ๋ฐฉํ–ฅ์ด๋ฉด ํŒจ์Šค
			if(nx<0||ny<0||nx>=N||ny>=M) continue;
			
			//์ฃผ์‚ฌ์œ„ ๊ตด๋ฆฌ๊ธฐ
			rollDice(d);
			
			//์—ฐ์‚ฐ
			if(map[nx][ny]==0) {
				map[nx][ny] = BOTTOM;
			}else {
				BOTTOM = map[nx][ny];
				map[nx][ny] = 0;
			}
			
			//๊ฐ’ ์—…๋ฐ์ดํŠธ
			x = nx;
			y = ny;
			//์ถœ๋ ฅ
			System.out.println(TOP);
		}
	}//end of main
	
	private static void rollDice(int d) {
		int temp=BOTTOM;
		switch(d){
		case 1://๋™
			BOTTOM = LEFT;
			LEFT = TOP;
			TOP = RIGHT;
			RIGHT = temp;
			break;
		case 2://์„œ
			BOTTOM = RIGHT;
			RIGHT = TOP;
			TOP = LEFT;
			LEFT = temp;
			break;
		case 3://๋ถ
			BOTTOM = UP;
			UP = TOP;
			TOP = DOWN;
			DOWN = temp;
			break;
		case 4://๋‚จ
			BOTTOM = DOWN;
			DOWN = TOP;
			TOP = UP;
			UP = temp;
			break;
		}
	}
}//end of class

 

 

 

 

 

 

 

 

 

 

๐Ÿ’Ž ๐Ÿ’Ž ๐Ÿ’Ž

 

 

๏ผฐ๏ฝ๏ฝ“๏ฝ”๏ฝ…๏ฝ„ ๏ผข๏ฝ™ ๏ผณ๏ผก๏ผน

๐˜›๐˜ฉ๐˜ข๐˜ฏ๐˜ฌ๐˜ด ๐˜ง๐˜ฐ๐˜ณ ๐˜ณ๐˜ฆ๐˜ข๐˜ฅ๐˜ช๐˜ฏ๐˜จ