
-Code
import java.io.*;
import java.util.*;
class Main {
static class Pos {
int x, y;
public Pos(int x, int y) {
this.x = x;
this.y = y;
}
}
static int[][] arr;
static boolean[][] visited;
static int[] dRow = {-1, 1, 0, 0};
static int[] dCol = {0, 0, -1, 1};
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
arr = new int[n][n];
visited = new boolean[n][n];
// 좌표 받기
StringTokenizer st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken()) - 1;
int y = Integer.parseInt(st.nextToken()) - 1;
// 배열 저정
for (int r = 0; r < n; r++) {
st = new StringTokenizer(br.readLine());
for (int c = 0; c < n; c++) {
arr[r][c] = Integer.parseInt(st.nextToken());
}
}
// 최대 갯수 구하기
int findVal = arr[x][y];
int answer = 0;
for (int r = 0; r < n; r++) {
for (int c = 0; c < n; c++) {
if (arr[r][c] == findVal) {
answer = Math.max(answer, getSize(new Pos(r, c), findVal));
}
}
}
System.out.println(answer);
}
private static int getSize(Pos start, int findVal) {
// 사작 위치 셋팅
Deque<Pos> deq = new ArrayDeque<>();
visited[start.x][start.y] = true;
deq.addLast(start);
int answer = 1;
// BFS 탐색
while(!deq.isEmpty()) {
Pos now = deq.pollFirst();
for (int i = 0; i < 4; i++) {
int nextX = now.x + dRow[i];
int nextY = now.y + dCol[i];
// 이동 가능한지 확인
if (!canMove(nextX, nextY)) continue;
// 방문하지 않았고 시작점 값과 같은 경우
if (!visited[nextX][nextY] && arr[nextX][nextY] == findVal) {
visited[nextX][nextY] = true;
deq.addLast(new Pos(nextX, nextY));
answer++;
}
}
}
return answer;
}
// 이동 가능 범위 확인
private static boolean canMove(int x, int y) {
return (0 <= x && x < arr.length) && (0 <= y && y < arr.length);
}
}'알고리즘 문제 > Java' 카테고리의 다른 글
| [goormlevel/Java] 인공지능 청소기 (0) | 2026.06.06 |
|---|---|
| [goormlevel/Java] 0커플 (0) | 2026.06.05 |
| [goormlevel/Java] Stack (0) | 2026.06.03 |
| [goormlevel/Java] 연속 점수 (0) | 2026.06.02 |
| [goormlevel/Java] 밀도 정렬 (0) | 2026.06.01 |