몽셀통통의 블로그

[BaekJoon] 1987 알파벳 :: monton 본문

프로그래밍/백준 문제 풀기

[BaekJoon] 1987 알파벳 :: monton

몽통이 2018. 5. 27. 17:22

문제

https://www.acmicpc.net/problem/1987



풀이

visit 배열과 방문한 알파벳인지 확인해주는 배열을 사용하여 dfs를 이용하여 방문

cnt 변수를 사용하여 횟수를 count 해줌




코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
 
using namespace std;
 
int R, C,ans;
char arr[21][21];
int visit[21][21];
int chknum[30];
int dir[4][2= { {-1,0},{0,1},{1,0},{0,-1} };
 
void func(int x, int y, int cnt) {
    if (x < 0 || x >= R || y < 0 || y >= C) return;
 
    for (int i = 0; i < 4; i++) {
        if (!visit[x][y]&&!chknum[arr[x][y]-65]) {
            visit[x][y] = chknum[arr[x][y] - 65]=1;
            //printf("x %d y %d arr[x][y]-65 %d\n", x, y, arr[x][y] - 65);
            ans = ans > cnt ? ans : cnt;
            func(x + dir[i][0], y + dir[i][1], cnt + 1);
            visit[x][y] = chknum[arr[x][y] - 65]= 0;
        }
    }
}
 
int main() {
    cin >> R >> C;
 
    for (int i = 0; i < R; i++) {
        
        for (int j = 0; j < C; j++) {
            cin >> arr[i][j];
        }
    }
 
    func(001);
    cout << ans;
}
cs