728x90
반응형
728x90
https://www.acmicpc.net/problem/1987
문제풀이 처음으로 DFS를 사용해서 풀어봤다.
반응형
골드 4 난이도 치고는 문제 자체는 어렵지 않다
나왔던 알파벳이 또 나오면 더 이상 진행하지만 않으면 되는데,
나는 HashSet을 이용하여 중복으로 나온건지 체크하였다.
package dfs;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;
public class Alphabet {
static char[][] map;
static Set<Character> set = new HashSet<Character>();
static int R, C, max;
static int[] dy = { 1, 0, -1, 0 };
static int[] dx = { 0, 1, 0, -1 };
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
R = Integer.parseInt(st.nextToken());
C = Integer.parseInt(st.nextToken());
map = new char[R][C];
for (int i = 0; i < R; i++) {
String str = br.readLine();
for (int j = 0; j < str.length(); j++) {
map[i][j] = str.charAt(j);
}
}
dfs(0, 0);
System.out.println(max);
}
public static void dfs(int y, int x) {
if (set.contains(map[y][x]))
return;
set.add(map[y][x]);
max = Math.max(max, set.size());
for (int dir = 0; dir < 4; dir++) {
int ny = y + dy[dir];
int nx = x + dx[dir];
if (ny < 0 || ny >= R || nx < 0 || nx >= C)
continue;
if (set.contains(map[ny][nx]))
continue;
dfs(ny, nx);
set.remove(map[ny][nx]);
}
}
}
728x90
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
[백준/java] 13335번: 트럭 (프로그래머스와 동일) (0) | 2021.08.25 |
---|---|
[백준/java] 1520번: 내리막길 - DFS + DP (0) | 2021.08.19 |
[백준/java] 2589번: 보물섬 - BFS, 브루트포스 (0) | 2021.08.18 |
[백준/java] 2206번: 벽 부수고 이동하기 - BFS (0) | 2021.08.17 |
[백준/java] 1010번: 다리 놓기 - 조합(Combination), 파스칼의 삼각형 (0) | 2021.08.16 |
댓글