1.
지나왔던 알파벳인지 파악하는 부분에서 조금 헤맸던 문제.
list를 사용하여 전체 순회를 하게 할 수도 있지만, 시간 효율성이 떨어진다.
visited 배열을 이용하여 풀면 효율적이다.
2.
이동 거리의 최대값을 찾아야 하므로 백트래킹을 써야 한다.
그렇기 때문에 DFS를 사용하는 것이 효과적이다.
visited 배열은 boolean[26] 배열로 해당 알파벳 - 'A'를 한 인덱스를 이용하면 된다.
나머지는 코드를 보면 이해가 될 것이다.
3.
import java.util.Scanner;
public class Main {
static int answer = 0, r, c;
static char[][] data;
static boolean[] visited = new boolean[26];
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
r = sc.nextInt();
c = sc.nextInt();
data = new char[r][c];
for (int i = 0; i < r; i++) {
String temp = sc.next();
for (int j = 0; j < c; j++) {
data[i][j] = temp.charAt(j);
}
}
dfs(0, 0, 1);
System.out.println(answer);
}
static void dfs(int x, int y, int cnt) {
int[] dx = { 1, -1, 0, 0 };
int[] dy = { 0, 0, 1, -1 };
visited[data[x][y] - 'A'] = true;
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (0 <= nx && nx < r && 0 <= ny && ny < c) {
if (!visited[data[nx][ny] - 'A']) {
dfs(nx, ny, cnt + 1);
}
}
}
visited[data[x][y] - 'A'] = false;
answer = Math.max(answer, cnt);
}
}
4.
[참고] https://geehye.github.io/baekjoon-1987/#
'Algorithm' 카테고리의 다른 글
[Java] 백준 10026 : 적록색약 (0) | 2020.08.28 |
---|---|
[Java] 백준 7569 : 토마토 (0) | 2020.08.26 |
[Java] 백준 1138 : 한 줄로 서기 (0) | 2020.08.25 |
[Java] 백준 1080 : 행렬 (0) | 2020.08.25 |
[Java] 백준 2133 : 타일 채우기 (0) | 2020.08.24 |