본문 바로가기

알고리즘

JAVA 백준1987 알파벳(BOJ1987)

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

 

1987번: 알파벳

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

www.acmicpc.net

상하좌우 배열로 하는부분은 구글 검색을 통해 참고했다. 아직은 갈길이 너무 멀다.

import java.io.*;
import java.util.*;

public class Main {
    static FastReader scan = new FastReader(); //입력
    static StringBuilder sb = new StringBuilder(); //제출답안

    static int R, C, count;
    static char[][] alphabetBoard;
    static ArrayList<Character> visited;
    static int[] dx = {1,-1,0,0};//상 하
    static int[] dy = {0,0,1,-1};//좌 우

    static void input() { //입력
        R = scan.nextInt();
        C = scan.nextInt();
        alphabetBoard = new char[R][C];
        for(int row = 0; row < R; row++) {
            String inputChar = scan.nextLine();
            for(int col = 0; col < C; col++) {
                alphabetBoard[row][col] = inputChar.charAt(col);
            }
        }
    }

    public static void main(String[] args) {
        input(); // 입력
        visited = new ArrayList<>();
        recFunc(0,0, 0);
        System.out.println(count);

    }


    static void recFunc(int k, int row, int col) {
        if(visited.contains(alphabetBoard[row][col])) {
            if(k > count) {
                count = k;
            }
        } else {
            visited.add(alphabetBoard[row][col]);
            for(int i=0; i<4; i++) {
                int nx = row + dx[i];
                int ny = col + dy[i];

                if(nx<0 || ny <0 || nx >R-1 || ny > C-1) continue;
                recFunc(k+1,nx, ny);
            }
            visited.remove(visited.size()-1);
        }
    }

    /*
    *
    *류호석 강사님 입력 템플릿
    *
    */
    static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        public FastReader() {
            br = new BufferedReader(new InputStreamReader(System.in));
        }

        public FastReader(String s) throws FileNotFoundException {
            br = new BufferedReader(new FileReader(new File(s)));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        String nextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }
}