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

์•Œ๊ณ ๋ฆฌ์ฆ˜

[๋ฐฑ์ค€ ์Šคํ„ฐ๋”” 10์ฃผ์ฐจ] 14503๋ฒˆ ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ ๊ณจ๋“œ4 - ์ž๋ฐ”(JAVA) / ์‹œ๋ฎฌ๋ ˆ์ด์…˜/ ๊ตฌํ˜„

๐Ÿ“‘ ๋ฌธ์ œ

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

 

14503๋ฒˆ: ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ

๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ฒญ์†Œํ•˜๋Š” ์˜์—ญ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์žˆ๋Š” ์žฅ์†Œ๋Š” N×M ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, 1×1ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜• ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด

www.acmicpc.net

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

๋ฌธ์ œ

๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ฒญ์†Œํ•˜๋Š” ์˜์—ญ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

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

๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘๋™ํ•œ๋‹ค.

  1. ํ˜„์žฌ ์œ„์น˜๋ฅผ ์ฒญ์†Œํ•œ๋‹ค.
  2. ํ˜„์žฌ ์œ„์น˜์—์„œ ํ˜„์žฌ ๋ฐฉํ–ฅ์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ๋ฐฉํ–ฅ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ธ์ ‘ํ•œ ์นธ์„ ํƒ์ƒ‰ํ•œ๋‹ค.
    1. ์™ผ์ชฝ ๋ฐฉํ–ฅ์— ์•„์ง ์ฒญ์†Œํ•˜์ง€ ์•Š์€ ๊ณต๊ฐ„์ด ์กด์žฌํ•œ๋‹ค๋ฉด, ๊ทธ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•œ ๋‹ค์Œ ํ•œ ์นธ์„ ์ „์ง„ํ•˜๊ณ  1๋ฒˆ๋ถ€ํ„ฐ ์ง„ํ–‰ํ•œ๋‹ค.
    2. ์™ผ์ชฝ ๋ฐฉํ–ฅ์— ์ฒญ์†Œํ•  ๊ณต๊ฐ„์ด ์—†๋‹ค๋ฉด, ๊ทธ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•˜๊ณ  2๋ฒˆ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.
    3. ๋„ค ๋ฐฉํ–ฅ ๋ชจ๋‘ ์ฒญ์†Œ๊ฐ€ ์ด๋ฏธ ๋˜์–ด์žˆ๊ฑฐ๋‚˜ ๋ฒฝ์ธ ๊ฒฝ์šฐ์—๋Š”, ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์„ ์œ ์ง€ํ•œ ์ฑ„๋กœ ํ•œ ์นธ ํ›„์ง„์„ ํ•˜๊ณ  2๋ฒˆ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.
    4. ๋„ค ๋ฐฉํ–ฅ ๋ชจ๋‘ ์ฒญ์†Œ๊ฐ€ ์ด๋ฏธ ๋˜์–ด์žˆ๊ฑฐ๋‚˜ ๋ฒฝ์ด๋ฉด์„œ, ๋’ค์ชฝ ๋ฐฉํ–ฅ์ด ๋ฒฝ์ด๋ผ ํ›„์ง„๋„ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์ž‘๋™์„ ๋ฉˆ์ถ˜๋‹ค.

๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๋Š” ์ด๋ฏธ ์ฒญ์†Œ๋˜์–ด์žˆ๋Š” ์นธ์„ ๋˜ ์ฒญ์†Œํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋ฒฝ์„ ํ†ต๊ณผํ•  ์ˆ˜ ์—†๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์„ธ๋กœ ํฌ๊ธฐ N๊ณผ ๊ฐ€๋กœ ํฌ๊ธฐ M์ด ์ฃผ์–ด์ง„๋‹ค. (3 ≤ N, M ≤ 50)

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

์…‹์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ์žฅ์†Œ์˜ ์ƒํƒœ๊ฐ€ ๋ถ์ชฝ๋ถ€ํ„ฐ ๋‚จ์ชฝ ์ˆœ์„œ๋Œ€๋กœ, ๊ฐ ์ค„์€ ์„œ์ชฝ๋ถ€ํ„ฐ ๋™์ชฝ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋นˆ ์นธ์€ 0, ๋ฒฝ์€ 1๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ง€๋„์˜ ์ฒซ ํ–‰, ๋งˆ์ง€๋ง‰ ํ–‰, ์ฒซ ์—ด, ๋งˆ์ง€๋ง‰ ์—ด์— ์žˆ๋Š” ๋ชจ๋“  ์นธ์€ ๋ฒฝ์ด๋‹ค.

๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์žˆ๋Š” ์นธ์˜ ์ƒํƒœ๋Š” ํ•ญ์ƒ ๋นˆ ์นธ์ด๋‹ค.

์ถœ๋ ฅ

๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์ฒญ์†Œํ•˜๋Š” ์นธ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

 

 

 

 

 

 

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

 ์ „ํ˜•์ ์ธ ๊ณจ๋“œV ์ˆ˜์ค€์˜ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฌธ์ œ์ด๋‹ค.

 ์กฐ๊ฑด๋งŒ ์ฐจ๊ทผ์ฐจ๊ทผ ๋”ฐ์ ธ์„œ ๋‹จ๊ณ„๋ฅผ ๋ฐŸ์•„์ฃผ๋ฉด ์‰ฝ๊ฒŒ ํ’€์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

 โœ”๏ธ ํ˜„์žฌ ์œ„์น˜๋ฅผ ์ฒญ์†Œํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ฒญ์†Œํ•œ๋‹ค.

 โœ”๏ธ ์™ผ์ชฝ ๋ฐฉํ–ฅ๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ์‚ฌ๋ฐฉ์„ ํ™•์ธํ•˜์—ฌ, ์ด๋™์ด ๊ฐ€๋Šฅํ•œ ์œ„์น˜๋ฅผ ํ™•์ธํ•œ ํ›„ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์ด๋™ํ•œ๋‹ค.

 ๐Ÿ’ก ๋”ฐ๋ผ์„œ ์‚ฌ๋ฐฉ ํƒ์ƒ‰์„ ์œ„ํ•œ ๋ฐฉํ–ฅ ์ธ๋ฑ์Šค ๋ฐฐ์—ด(dr/dc)์€ ์ธ๋ฑ์Šค๋ฅผ +/- ํ•  ๋•Œ ์›ํ•˜๋Š” ๋™์„œ๋‚จ๋ถ์˜ ์ˆœ์„œ๊ฐ€ ์œ ์ง€๋˜๋„๋ก ์ง ๋‹ค. ๋ฌธ์ œ์—์„œ ์ œ์‹œํ•œ ๋ถ(0)-๋™(1)-๋‚จ(2)-์„œ(3)์˜ ๊ฒฝ์šฐ ์ธ๋ฑ์Šค๋ฅผ ์ฐจ๋ก€๋กœ ๋งˆ์ด๋„ˆ์Šค ์‹œํ‚ฌ ๋•Œ ์›ํ•˜๋Š” ์™ผ์ชฝ ๋ฐฉํ–ฅ ์ˆœ์„œ๊ฐ€ ์œ ์ง€๋œ๋‹ค.

 โœ”๏ธ ์‚ฌ๋ฐฉ์„ ํ™•์ธํ•ด๋„ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์ด ์—†๋‹ค๋ฉด, ์กฐ๊ฑด๋Œ€๋กœ ๋ณด๋Š” ๋ฐฉํ–ฅ์€ ์œ ์ง€ํ•œ ์ฑ„๋กœ ํ•œ ์นธ ๋’ค๋กœ ์ด๋™ํ•œ๋‹ค. ํ›„์ง„๋งˆ์ € ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด(๋ฒฝ์— ๋ง‰ํžˆ๊ฑฐ๋‚˜ ๋ฐฐ์—ด๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚จ) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ข…๋ฃŒํ•œ๋‹ค.

 

 

 

 

 

 

 

 

 

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

public class Main_๋ฐฑ์ค€_14503_๋กœ๋ด‡์ฒญ์†Œ๊ธฐ_๊ณจ๋“œV {

	// 0:๋ถ, 1:๋™, 2:๋‚จ, 3:์„œ
	static int[] dr = {-1, 0, 1, 0};
	static int[] dc = {0, 1, 0, -1};
	static int[][] map;
	static int N, M, r, c, d, cnt=0;
	
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		//N,M
		N = Integer.parseInt(st.nextToken());
		M = Integer.parseInt(st.nextToken());
		//robot
		st = new StringTokenizer(br.readLine());
		r = Integer.parseInt(st.nextToken());
		c = Integer.parseInt(st.nextToken());
		d = Integer.parseInt(st.nextToken());
		//map
		map = new int[N][M];
		for (int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine());
			for (int j = 0; j < M; j++) {
				// 0:๋นˆ ์นธ, 1:๋ฒฝ
				map[i][j] = Integer.parseInt(st.nextToken());
			}
		}//input
		
		clean();
		System.out.println(cnt);
		
	}//end of main
	
	private static void clean() {
		while(true) {
			if(map[r][c]==0) {// ํ˜„์žฌ ์œ„์น˜๊ฐ€ ์ฒญ์†Œ๊ฐ€ ๋˜์–ด์žˆ์ง€ ์•Š์€ ์นธ์ด๋ผ๋ฉด
				map[r][c] = 2;
				cnt++;				
			}
			if(!move(r, c, d)) {// ์ด๋™ ์‹œ๋„ ํ›„, ์ด๋™์ด ์•ˆ๋์œผ๋ฉด
				//ํ›„์ง„ ํ™•์ธ
				if(!back(r,c,d)) break;
			}
		}
	}//clean
	
	private static boolean move(int r0, int c0, int d0) {
		int nr, nc, nd = d0;
		for (int i = 1; i <= 4; i++) {	// ์™ผ์ชฝ๋ถ€ํ„ฐ ๋„ค๋ฐฉํ–ฅ ํ™•์ธ
			nd = nd-1<0?3:nd-1;
			nr = r0+dr[nd];
			nc = c0+dc[nd];
            
			//๋„ค ๋ฐฉํ–ฅ ๋ชจ๋‘ ์ฒญ์†Œ๊ฐ€ ์ด๋ฏธ ๋˜์–ด์žˆ๊ฑฐ๋‚˜ ๋ฒฝ์ธ ๊ฒฝ์šฐ->์ด๋™ ๋ถˆ๊ฐ€
			if(nr<0||nr>=N||nc<0||nc>=M||map[nr][nc]==1||map[nr][nc]==2) continue;
            
			//์ด๋™ ๊ฐ€๋Šฅ->์—…๋ฐ์ดํŠธ
			r = nr;
			c = nc;
			d = nd;
			return true;
		}
		return false;
	}//move
	
	private static boolean back(int r0, int c0, int d0) {
		int nr, nc, nd= d0-1<0?3:d0-1;
		nd = nd-1<0?3:nd-1; //ํ›„์ง„ํ•ด์•ผ ํ•˜๋Š” ๋ฐฉํ–ฅ(๋‘ ๋ฒˆ ์™ผ์ชฝ์œผ๋กœ ๋Œ๋ฆฌ๊ธฐ)
		nr = r0+dr[nd];
		nc = c0+dc[nd];
		if(nr<0||nr>=N||nc<0||nc>=M||map[nr][nc]==1) return false;
		else {
			// ๋ฒฝ์ด ์•„๋‹ˆ๋ฉด, ๋ณด๊ณ ์žˆ๋Š” ๋ฐฉํ–ฅ(d)์€ ๋‘๊ณ  ์œ„์น˜๋งŒ ํ›„์ง„ํ•œ๋‹ค. 
			r = nr;
			c = nc;
			return true;
		}
	}//back
	
}//end of class

 

 

 

 

 

 

 

 

 

 

 

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

 

 

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

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