https://www.acmicpc.net/problem/1987
1987번: 알파벳
세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으
www.acmicpc.net
백준 1987 알파벳
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
//https://www.acmicpc.net/problem/1987
public class Main{
static int R,C;
static char[][] board;
static int[] dx={-1,1,0,0};
static int[] dy={0,0,-1,1};
static boolean[] visited;
static int max;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
st = new StringTokenizer(br.readLine());
R = Integer.parseInt(st.nextToken());
C = Integer.parseInt(st.nextToken());
board = new char[R][C];
visited=new boolean[26];
for (int i = 0; i < R; i++) {
board[i] = br.readLine().toCharArray();
}
dfs(0,0,1);
System.out.println(max);
}
static void dfs(int x,int y,int cnt){
visited[board[x][y]-'A']=true;
max=Math.max(max,cnt);
//상하좌우 4번 반복
for (int p = 0; p < 4; p++) {
int xx=x+dx[p];
int yy=y+dy[p];
if(xx>-1&&xx<R&&yy>-1&&yy<C){
if(visited[board[xx][yy]-'A']) continue;
visited[board[xx][yy]-'A']=true;
dfs(xx,yy,cnt+1);
visited[board[xx][yy]-'A']=false;
}
}
}
}