본문 바로가기

Coding/백준

1987번 알파벳

 DFS 문제.

 

 방문한 알파벳을 체크하면서 나아가면 된다.

 

 ps. check 배열과 v 배열을 합쳐서 하나의 배열로 표현하였으면 더 깔끔하지 않았을까싶다.

 

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
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#define visited true
#define Non_visited false
#define MAX 21
 
using namespace std;
 
int R,C;
char board[MAX][MAX];
int check[27];
bool v[MAX][MAX];
int xx[4]={1,0,-1,0};
int yy[4]={0,1,0,-1};
int ans;
 
void solved(int x, int y, int cnt){
    if(v[x][y]==visited) return;
    v[x][y]=visited;
    
    for(int i=0;i<4;i++){
        int nx=x+xx[i];
        int ny=y+yy[i];
        
        if(nx<0 || ny<0 || nx>=|| ny>=C) continue;
        if(check[board[nx][ny]-'A']!=1){
            check[board[nx][ny]-'A']=1;
            solved(nx,ny,cnt+1);
            check[board[nx][ny]-'A']=0;
            v[nx][ny]=Non_visited;
        }
    }
    ans=max(ans,cnt);
}
 
int main(){
    cin >> R >> C;
    
    for(int i=0;i<R;i++){
        for(int j=0;j<C;j++){
            cin >> board[i][j];
        }
    }
    
    check[board[0][0]-'A']=1;
    
    solved(0,0,1);
    
    cout << ans << endl;
}
 
cs

'Coding > 백준' 카테고리의 다른 글

1120번 문자열  (0) 2020.06.15
2042번 구간 합 구하기  (0) 2020.06.09
10448번 유레카 이론  (0) 2020.05.04
2206번 벽 부수고 이동하기  (0) 2020.04.24
1182번 부분수열의 합  (0) 2020.04.20