아무코딩

[백준 1987] 알파벳 본문

알고리즘/백준

[백준 1987] 알파벳

동 코 2020. 5. 29. 00:29

문제풀이

dfs를 사용하며 최대한 갈수 있는 칸수를 계속 비교하여 업데이트 해준다. 

소스코드

더보기
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
51
52
53
54
55
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
 
public class Baekjoon1987 {
    static final int COUNT_OF_ALPHABET = 26;
    static int rowSize;
    static int colSize;
    static char[][] map;
    static boolean[] visited;
    static int[] dirRow={1,0,-1,0};
    static int[] dirCol={0,-1,0,1};
    static int maxDistance=0;
    public static void input() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        rowSize = Integer.parseInt(st.nextToken());
        colSize = Integer.parseInt(st.nextToken());
        map = new char[rowSize+1][colSize+1];
        visited = new boolean[COUNT_OF_ALPHABET];
        for(int i=1;i<=rowSize;i++){
            String str = br.readLine();
            for(int j=1;j<=colSize;j++){
                map[i][j] = str.charAt(j-1);
            }
        }
    }
 
    public static void dfs(int row, int col, int cnt){
        visited[map[row][col]-'A'= true;
        for(int i=0;i<4;i++){
            int nextRow = row + dirRow[i];
            int nextCol = col + dirCol[i];
 
            if(isRange(nextRow, nextCol)){
                if(!visited[map[nextRow][nextCol]-'A'])
                    dfs(nextRow,nextCol,cnt+1);
            }
        }
        visited[map[row][col]-'A'= false;
        maxDistance = Math.max(maxDistance,cnt);
    }
 
    public static boolean isRange(int nextRow, int nextCol) {
        return nextRow>0 && nextCol>0 && nextRow<=rowSize && nextCol<=colSize;
    }
 
    public static void main(String[] args) throws IOException {
        input();
        dfs(1,1,1);
        System.out.println(maxDistance);
    }
}
 
cs

문제 링크 : www.acmicpc.net/problem/1987

 

1987번: 알파벳

문제 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한

www.acmicpc.net

 

Comments