- toc {:toc}
๋ฌธ์ ํ์ธ
1103: ๊ฒ์ ๋ฌธ์ ํ์ธํ๊ธฐ
ํ์ด
๋์ ์ด 4๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋ฉด์ ์์ง์ผ ์ ์๋ ์ต๋์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
- ์
๋ ฅ์ด space๊ฐ ์ฃผ์ด์ ธ์ ๋ค์ด์ค๋ ๊ฒ์ด ์๋๋ผ ํ ๋ฒ์ ๋ค์ด์จ๋ค.
- string์ผ๋ก ๋ฐ์์ง int๋ก ๋ฐ์์ง ์ ํ. ๋ ๋ค ์๊ด์๊ธด ํ๋ค.
- board์ ๋๋ ์ซ์ ์ ์ฅ
- ์ต๋์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ โ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์
ํด์ ์ต๋์ ๊ฒฝ์ฐ์ ์ ์ฐ์ถ (DFS)
- ๊ฒฝ์ฐ์ ์ ์ ์ฅ์ ์ํด dist ๋ฐฐ์ด ์์ฑํด ์ด๋ ๊ฑฐ๋ฆฌ ์ ์ฅ
- ์์ ์ผ๋ก๋ถํฐ ๊ฐ๋ฅํ ๋จผ ๊ณณ์ผ๋ก ์ฌ๊ท์ ์ผ๋ก ์ด๋ํ๋ฉฐ -1์ธ dist๊ฐ์ 0์ผ๋ก ์ด๊ธฐํ
- ๋จผ ๊ณณ์์๋ถํฐ ์ด๋๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ์๋ฅผ ์ธ๋ฉฐ ์์ ์ผ๋ก ๋์์ค๋ ๋ฐฉ์
- ๊ณ ๋ คํด์ผ ํ๋ ์์ธ ์ฌํญ
- ๋ฌดํ๋ฒ ์์ง์ด๋ ๊ฒฝ์ฐ โ vis ๋ก ๋ฐฉ๋ฌธํ ๊ฒฝ์ฐ 1๋ก ์ฒดํฌ. ๋ค์ ๋ฐฉ๋ฌธํ๋ฉด ๋ฌดํ๋ฒ ์ด๋ํ๋ค ๊ฐ์
- ๋์ ์ด ๊ตฌ๋ฉ์ ๋น ์ง๊ฑฐ๋ ๋ณด๋ ๋ฐ๊นฅ์ผ๋ก ๋๊ฐ๋ ๊ฒฝ์ฐ
#include <bits/stdc++.h>
using namespace std;
int board[50][50];
int vis[50][50];
int dist[50][50];
int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};
int N, M;
int dfs(int x, int y){
if (board[x][y] == 0 || x < 0 || x >= N || y < 0 || y >= M) return 0;
if (vis[x][y] == 1) {
cout << -1 << endl;
exit(0);
}
if (dist[x][y] != -1) return dist[x][y];
vis[x][y] = 1;
dist[x][y] = 0;
int mat = board[x][y];
for(int dir = 0; dir<4; dir++){
int nx = x + dx[dir] * mat;
int ny = y + dy[dir] * mat;
if(dist[x][y]<dfs(nx, ny)+1){
dist[x][y] = dfs(nx, ny)+1;
}
}
vis[x][y] = 0;
return dist[x][y];
}
int main(){
ios::sync_with_stdio(true);
cin.tie(0); cout.tie(0);
cin >> N >> M;
for (int row=0; row<N; row++){
string str;
cin >> str;
for (int col=0; col<M; col++){
dist[row][col] = -1;
int val;
if (str[col]=='H') val = 0;
else {
val = int(str[col]) - 48;
}
board[row][col] = val;
}
}
int res = dfs(0,0);
cout << res << endl;
return 0;
}