틈날때 마다 dfs 문제를 풀어나가고 있다. 이 문제도 그냥 dfs 하면서 가장 멀리 갈 수 있는 경로의 길이를 출력하는 문제다 ..
boj에 dfs로 태그되어 있는 문제를 푸는데 앞에서 부터 풀다보니 계속 난이도가 쉬운 문제 위주로 풀게 되는 것 같다.
#include <iostream>
#include <algorithm>
using namespace std;
char map[21][21];
int color[26] = { 0 };
int Y, X;
int dfs(int y, int x)
{
//최대 이동할 수 있는 칸 return;
int ret = 0;
char cur = map[y][x];
color[cur - 'A'] = 1;
for (int i = -1; i <= 1; i++) {
for (int j = -1; j <= 1; j++) {
if (i*j == 0 && i + j != 0)
{
int nextY = y + i;
int nextX = x + j;
if (nextY < 0 || nextY >= Y || nextX < 0 || nextX >= X) continue;
char next = map[nextY][nextX];
if (color[next - 'A'] == 0) {
ret = max(ret, 1+dfs(nextY, nextX));
color[next - 'A'] = 0;
}
}
}
}
return ret;
}
int main() {
cin >> Y >> X;
for (int i = 0; i < Y; i++) {
cin >> map[i];
}
cout << dfs(0, 0) + 1;
}
좀 괴상한 부분이 있다면 4 방향 보는 부분을 2차원 반복문으로 처리한 것. 늘 하던데로 하려니 귀찮아서 저렇게 처리 해봤는데 막생 해보니 저게 더 귀찮았다
'알고리즘 > BOJ문제풀이' 카테고리의 다른 글
4차 대회 (0) | 2016.11.26 |
---|---|
3차 대회 (0) | 2016.11.25 |
186번째 문제 - 1124 언더 프라임 (0) | 2016.11.24 |
185번째 문제 - 9417 최대 gcd (0) | 2016.11.24 |
184번째 문제 - 1371 가장 많은 글자 (0) | 2016.11.24 |