[백준] 1987번 알파벳 JAVA 풀이

권용환·2021년 8월 31일
0

백준

목록 보기
4/36
post-thumbnail

문제 바로가기

나의 풀이

경로에 따른 weight 라던지 value 값이 따로 없었던 기본적인 dfs 문제였다. 따라서 stack 과 같은 다른 자료구조들을 굳이 쓸 필요가 없었다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

class Main {

    static int r, c;
    // 문자를 그대로 담을 map
    static char[][] map;
    static int[] dx = {0, 0, -1, 1};
    static int[] dy = {-1, 1, 0, 0};
    static int max = 0;
    // 특정 (x,y) 위치의 방문과 특정 문자를 방문했는 지, 2가지를 모두 해결
    static boolean[] visited = new boolean[26];

    public static void main(String[] args) throws IOException {
        //input
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        r = Integer.parseInt(st.nextToken());
        c = Integer.parseInt(st.nextToken());
        map = new char[r][c];

        for (int i = 0; i < r; i++) {
            char[] chars = br.readLine().toCharArray();
            map[i] = chars;
        }

        dfs(0, 0, 0);
        System.out.println(max);
    }

    public static void dfs(int x, int y, int count) {
        if (visited[map[x][y] - 'A']) {
            max = Math.max(max, count);
            return;
        } else {
            visited[map[x][y] - 'A'] = true;
            for (int i = 0; i < 4; i++) {
                int nx = x + dx[i];
                int ny = y + dy[i];
                if (nx < 0 || ny < 0 || nx >= r || ny >= c) continue;
                dfs(nx, ny, count + 1);
            }
            // 백트래킹의 핵심 포인트
            visited[map[x][y] - 'A'] = false;
        }
    }
}
profile
마구 낙서하는 블로그입니다

0개의 댓글