Algorithm/Problem and Strategies

[๋ฐฑ์ค€] 17070๋ฒˆ - ํŒŒ์ดํ”„ ์˜ฎ๊ธฐ๊ธฐ 1

 

 

๐Ÿ’ก ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ (DFS)

 

์‚ผ์„ฑ Aํ˜• ๊ธฐ์ถœ๋ฌธ์ œ๋ผ ํ•ด์„œ ํ’€์–ด๋ดค๋Š”๋ฐ, 

DFS๋กœ ์†์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ์˜€๋‹ค.

 

๋จผ์ € ํŒŒ์ดํ”„๋ฅผ ๋ฐ€์–ด ์˜ฎ๊ฒจ์•ผํ•˜๋Š” ์ƒํ™ฉ์—์„œ ํŒŒ์ดํ”„์— ์˜ฎ๊ธฐ๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐ€๋กœ 2๊ฐ€์ง€, ์„ธ๋กœ 2๊ฐ€์ง€, ๋Œ€๊ฐ์„  3๊ฐ€์ง€์ธ๋ฐ

DFS๋ฅผ ์ด์šฉํ•ด ์กฐ๊ฑด์„ ์ž˜ ๋งž์ถ”์–ด ๋ชจ๋“  ์ƒํ™ฉ์„ ๊ณ ๋ คํ•ด ๋งŒ๋“ค์–ด์ฃผ๋ฉด ๋œ๋‹ค.

 

  • ๊ฐ€๋กœ์ธ ๊ฒฝ์šฐ - (x,y+1), (x+1,y+1)

  • ์„ธ๋กœ์ธ ๊ฒฝ์šฐ - (x+1,y), (x+1,y+1)

  • ๋Œ€๊ฐ์„ ์ธ ๊ฒฝ์šฐ - (x,y+1), (x+1,y), (x+1,y+1)

 

์ด๋•Œ ์ฃผ์˜ํ• ์ ์€ ์˜ฎ๊ฒจ์•ผ ํ•  ๊ณณ์ด 1์ธ ๊ณณ์€ ๊ฐ€์ง€ ๋ชปํ•˜๋„๋ก ํ•ด์ค˜์•ผํ•˜๋Š”๋ฐ 

๊ฐ€๋กœ์™€ ์„ธ๋กœ๋Š” ๊ฐ๊ฐ (x+1, y)์™€ (x, y+1)๋งŒ ๊ณ ๋ คํ•ด์ฃผ๋ฉด ๋˜์ง€๋งŒ ๋Œ€๊ฐ์„ ์€ (x-1,y) (x,y-1) (x,y), ์ด 3๊ฐ€์ง€๋ฅผ ๊ณ ๋ คํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

โœ๏ธ ๊ตฌํ˜„ ์ฝ”๋“œ

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

vector<vector<int>> adj;
int cnt = 0;
int N;

void dfs(int x, int y, int dir) {

	if (x >= 0 && y >= 0 && x < N && y < N) {
		
		if (dir == 2) {
			if (adj[x][y] == 1 || adj[x - 1][y] == 1 || adj[x][y - 1] == 1) {
				return;
			}
		}
		else if (dir == 1 || dir == 0) {
			if (adj[x][y] == 1) {
				return;
			}
		}

		if (x == N - 1 && y == N - 1) {
			cnt++;
			return;
		}

		

		if (dir == 0) {
			dfs(x, y + 1, 0);
			dfs(x + 1, y + 1, 2 );
		}
		else if (dir == 1) {
			dfs(x + 1, y, 1);
			dfs(x + 1, y + 1, 2);
		}
		else {
			dfs(x, y + 1, 0);
			dfs(x + 1, y, 1);
			dfs(x + 1, y + 1, 2);
		}
	}

	
}

int main() {
	
	cin >> N;
	
	adj = vector<vector<int>>(N, vector<int>(N, 0));
	for (int i = 0; i < N; ++i) {
		for (int j = 0; j < N; ++j) {
			int block;
			cin >> block;
			if(block ==1)
				adj[i][j] = block;		
		}
	}
	
	if (adj[0][0] != 1 && adj[N-1][N-1] != 1) {
		dfs(0, 1, 0);
	}

	cout << cnt;
}

 

โœ๏ธ ๊ณ ๋ คํ•ด์•ผ ํ•  ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค

 

1) (0,0)์ด 1์ธ ๊ฒฝ์šฐ

4
1 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0

 

2) (N-1, N-1)์ด 1์ธ ๊ฒฝ์šฐ

4
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 1

 

 

3) ๋งˆ์ง€๋ง‰์˜ ํŒŒ์ดํ”„๊ฐ€ ๋Œ€๊ฐ์„ ์ผ ๋•Œ (N-2,N-1) ๋˜๋Š” (N-1, N-2)๊ฐ€ 1์ธ ๊ฒฝ์šฐ

 

4
0 0 0 0
0 0 0 0
0 0 0 1
0 0 1 0

 

๊ถ๊ธˆํ•˜์‹  ๊ฒƒ์ด ์žˆ์œผ์‹œ๋ฉด ์–ธ์ œ๋“ ์ง€ ๋Œ“๊ธ€ ๋‹ฌ์•„์ฃผ์„ธ์š”!

 

๋ฐ˜์‘ํ˜•