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

 

1189๋ฒˆ: ์ปด๋ฐฑํ™ˆ

์ฒซ ์ค„์— ์ •์ˆ˜ R(1 โ‰ค R โ‰ค 5), C(1 โ‰ค C โ‰ค 5), K(1 โ‰ค K โ‰ค Rร—C)๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ๋ถ€ํ„ฐ R+1๋ฒˆ์งธ ์ค„๊นŒ์ง€๋Š” Rร—C ๋งต์˜ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” '.'๊ณผ 'T'๋กœ ๊ตฌ์„ฑ๋œ ๊ธธ์ด๊ฐ€ C์ธ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค

www.acmicpc.net

 

 

 

 

 

์–ด๋Š ํ•œ์ง€์ ์—์„œ ์‹œ์ž‘ํ•ด์„œ ๋‹ค๋ฅธ ์ง€์ ๊นŒ์ง€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฐฉ๋ฒ•์„ ํƒ์ƒ‰ํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ + ๋ฐฑํŠธ๋ž˜ํ‚น ์œ ํ˜•์˜ ๋ฌธ์ œ์ด๋‹ค. ๋ฐฑํŠธ๋ž˜ํ‚น ๋ฌธ์ œ์—์„œ๋Š” ์žฌ๊ท€๋ฅผ ํ†ตํ•œ DFS ํƒ์ƒ‰์œผ๋กœ ํ‘ธ๋Š” ๊ฒƒ์ด ์ ํ•ฉํ•˜๋‹ค.

 

๊ทธ๋ž˜์„œ ํ’€๋ฉด์„œ ๊ฐ™์€ ์œ ํ˜•์ธ 1987๋ฒˆ ์•ŒํŒŒ๋ฒณ๊ณผ ๋น„์Šทํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

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

 

1987๋ฒˆ: ์•ŒํŒŒ๋ฒณ

์„ธ๋กœ R์นธ, ๊ฐ€๋กœ C์นธ์œผ๋กœ ๋œ ํ‘œ ๋ชจ์–‘์˜ ๋ณด๋“œ๊ฐ€ ์žˆ๋‹ค. ๋ณด๋“œ์˜ ๊ฐ ์นธ์—๋Š” ๋Œ€๋ฌธ์ž ์•ŒํŒŒ๋ฒณ์ด ํ•˜๋‚˜์”ฉ ์ ํ˜€ ์žˆ๊ณ , ์ขŒ์ธก ์ƒ๋‹จ ์นธ (1ํ–‰ 1์—ด) ์—๋Š” ๋ง์ด ๋†“์—ฌ ์žˆ๋‹ค. ๋ง์€ ์ƒํ•˜์ขŒ์šฐ๋กœ ์ธ์ ‘ํ•œ ๋„ค ์นธ ์ค‘์˜ ํ•œ ์นธ์œผ

www.acmicpc.net

 

 

 

 

 

 

ํ’€์ด

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

public class Main {
	static int R, C, K;
	static int[][] graph;
	static boolean[][] visited;
	static int[] dx = {-1, 1, 0, 0};
	static int[] dy = {0, 0, -1, 1};
	static int answer;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		R = Integer.parseInt(st.nextToken());
		C = Integer.parseInt(st.nextToken());
		K = Integer.parseInt(st.nextToken());
		
		graph = new int[R][C];
		
		for(int i = 0; i < R; i++) {
			String input = br.readLine();
			
			for(int j = 0; j < C; j++) {
				graph[i][j] = input.charAt(j);
			}
		}
		
		//๊ตฌํ˜„
		visited = new boolean[R][C];
		answer = 0;
		
		dfs(R - 1, 0, 1);
		
		//์ถœ๋ ฅ
		System.out.println(answer);
	}

	public static void dfs(int x, int y, int count) {
		if(x == 0 && y == C - 1) { //์ง‘๊นŒ์ง€ ๋„์ฐฉ
			if(count == K) { //๊ฑฐ๋ฆฌ๊ฐ€ K์ธ ๊ฒฝ์šฐ
				answer++;
			}
			
			return;
		}
		
		visited[x][y] = true;
		
		for(int i = 0; i < 4; i++) { //์ƒํ•˜์ขŒ์šฐ ํƒ์ƒ‰
			int nx = x + dx[i];
			int ny = y + dy[i];
			
			if(0 <= nx && nx < R && 0 <= ny && ny < C) { //์ขŒํ‘œ ๋ฒ”์œ„ ์•ˆ์— ์žˆ๊ณ 
				if(!visited[nx][ny] && graph[nx][ny] == '.') { //์ง€๊ธˆ๊นŒ์ง€ ๋ฐฉ๋ฌธํ•œ ์  ์—†๊ณ , ๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฉด
					dfs(nx, ny, count + 1);
				}
			}
		}
		
		visited[x][y] = false; //๋ฐฑํŠธ๋ž˜ํ‚น์„ ์œ„ํ•œ ๋ฐฉ๋ฌธ ์ฒดํฌ ํ•ด์ œ
	}

}

DFS + ๋ฐฑํŠธ๋ž˜ํ‚น์ด๋ผ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆด๊นŒ๋ด ๊ฑฑ์ •ํ–ˆ์—ˆ๋Š”๋ฐ, ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ์ž…๋ ฅ์˜ ํฌ๊ธฐ๊ฐ€ R(1 โ‰ค R โ‰ค 5), C(1 โ‰ค C โ‰ค 5), K(1 โ‰ค K โ‰ค Rร—C)๋กœ ํฌ์ง€ ์•Š์•„์„œ ์‹œ๊ฐ„์ด ๋งŽ์ด ๋‚˜์˜ค์ง„ ์•Š์•˜๋‹ค.

 

 

 

 

 

๊ฒฐ๊ณผ

giraffe_