알고리즘/BOJ문제풀이

187번째 문제 - 1987 알파벳

quantdave 2016. 11. 24. 16:49


틈날때 마다 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