Problem Solving/Baekjoon
[백준] 16929 Two Dots - Graph Theory / Java
graycode
2022. 10. 5. 22:53
• 문제 링크
16929번: Two Dots
첫째 줄에 게임판의 크기 N, M이 주어진다. 둘째 줄부터 N개의 줄에 게임판의 상태가 주어진다. 게임판은 모두 점으로 가득차 있고, 게임판의 상태는 점의 색을 의미한다. 점의 색은 알파벳 대문
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 n, m;
static String[] dots;
static boolean[][] visit;
static int[] dy = {-1, 1, 0, 0};
static int[] dx = {0, 0, -1, 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());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
dots = new String[n];
visit = new boolean[n][m];
for (int i = 0; i < n; i++)
dots[i] = br.readLine();
boolean isCycle = false;
loop:
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (visit[i][j])
continue;
isCycle = dfs(i, j, -1, -1);
if (isCycle)
break loop;
}
}
bw.write((isCycle ? "Yes" : "No"));
bw.flush();
}
private static boolean dfs(int y, int x, int py, int px) {
if (visit[y][x])
return true;
visit[y][x] = true;
for (int i = 0; i < 4; i++) {
int ny = y + dy[i];
int nx = x + dx[i];
if (ny < 0 || ny >= n || nx < 0 || nx >= m)
continue;
if (ny == py && nx == px)
continue;
if (dots[y].charAt(x) == dots[ny].charAt(nx)) {
if (dfs(ny, nx, y, x))
return true;
}
}
return false;
}
}