๐ก ๊น์ด ์ฐ์ ํ์ (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
๊ถ๊ธํ์ ๊ฒ์ด ์์ผ์๋ฉด ์ธ์ ๋ ์ง ๋๊ธ ๋ฌ์์ฃผ์ธ์!
'Algorithm > Problem and Strategies' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 12100๋ฒ - 2048(Easy) (0) | 2020.08.09 |
---|---|
[๋ฐฑ์ค] 13900๋ฒ - ์์์์ ๊ณฑ์ ํฉ (๋ถ๋ถํฉ) (0) | 2020.08.05 |
[๋ฐฑ์ค] 11657๋ฒ - ํ์๋จธ์ (๋ฒจ๋ง-ํฌ๋ ์๊ณ ๋ฆฌ์ฆ) (0) | 2020.05.19 |
[๋ฐฑ์ค] 2014๋ฒ - ์์์ ๊ณฑ (0) | 2020.05.14 |
[๋ฐฑ์ค] 6593๋ฒ - ์๋ฒ ๋น๋ฉ (0) | 2020.04.30 |