• 문제 링크
1987번: 알파벳
세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으
www.acmicpc.net
• 풀이 과정
• 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
static int r, c, max;
static char[][] mat;
static boolean[] visit;
static int[][] dir = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
r = Integer.parseInt(st.nextToken());
c = Integer.parseInt(st.nextToken());
if (r == 1 && c == 1) max = 1;
else {
mat = new char[r][c];
visit = new boolean[26];
for (int i = 0; i < r; i++) mat[i] = br.readLine().toCharArray();
recur(0, 0, 0);
}
bw.write(String.valueOf(max));
bw.flush();
}
private static void recur(int y, int x, int cnt) {
int idx = mat[y][x] - 'A';
if (visit[idx]) {
max = Math.max(max, cnt);
return;
}
visit[idx] = true;
for (int[] d : dir) {
int ny = y + d[0], nx = x + d[1];
if (ny >= 0 && ny < r && nx >= 0 && nx < c) recur(ny, nx, cnt + 1);
}
visit[idx] = false;
}
}
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 1062 가르침 - Backtracking / Java (0) | 2022.09.25 |
---|---|
[백준] 16197 두 동전 - Backtracking / Java (0) | 2022.09.24 |
[백준] 16987 계란으로 계란치기 - Backtracking / Java (0) | 2022.09.22 |
[백준] 17136 색종이 붙이기 - Backtracking / Java (0) | 2022.09.21 |
[백준] 16945 매직 스퀘어로 변경하기 - Backtracking / Java (0) | 2022.09.20 |
댓글