본문 바로가기
알고리즘 문제/Java

[goormlevel/Java] 뭉친 K

by 현장 2026. 6. 4.

-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