Algorithm/baekjoon

알파벳

마닐라 2022. 1. 17. 18:34

📍 문제 설명

 

💡 접근

알파벳 방문배열을 만들어서 방문한 알파벳을 만날 때 마다 현재 거리를 리턴해주면 된다.

그리고 방문체크 해제해줘야 다른 루트도 정상적으로 확인할 수 있다!

 

👩‍💻 코드

import java.util.*;

public class Main {
    static int n, m, k, dis, max;
    static int[][] board;
    static int[] ch,combi,pm;
    static String[] split;
    static int[] dx = {-1,1,0,0};
    static int[] dy = {0,0,-1,1};
    //알파벳 방문여부
    static boolean[] checked = new boolean[26];
    public static void main(String[] args) {
        Main T = new Main();
        Scanner kb = new Scanner(System.in);

        n = kb.nextInt();
        m = kb.nextInt();
        kb.nextLine();
        board = new int[n][m];
        for (int i = 0; i < n; i++) {
            String[] s = kb.nextLine().split("");
            for (int j = 0; j < s.length; j++) {
                board[i][j] = s[j].charAt(0) - 'A';
            }
        }

        T.solution(0, 0, 0);
        System.out.println(max);
    }

    private void solution(int x, int y, int cnt) {
        //방문한 알파벳이라면 현재 거리를 리턴
        if(checked[board[x][y]]) {
            System.out.println(cnt);
            max = Math.max(max, cnt);
            return;
        }
        //현재 좌표가 방문한 알파벳이 아니면 상하좌우 탐색해보기
        else {
            //현재 좌표는 일단 방문 처리
            checked[board[x][y]] = true;
            for (int i = 0; i < 4; i++) {
                int nx = x + dx[i];
                int ny = y + dy[i];
                if (nx >= 0 && ny >= 0 && nx < n && ny < m) {
                    solution(nx, ny, cnt+1);
                }
            }
            //상하좌우 다 돌았으면 다른 루트 확인을 위해 방문해제
            checked[board[x][y]] = false;
        }
    }
}

'Algorithm > baekjoon' 카테고리의 다른 글

스타트와 링크  (0) 2022.01.18
스도쿠  (0) 2022.01.18
암호 만들기  (0) 2022.01.17
영역 구하기========  (0) 2022.01.17
잃어버린 괄호  (0) 2021.12.31