SWEA -1861 : 정사각형 방 [자바]

HungAh.log·2021년 8월 12일
0

SWEA 문제풀이 - 자바

목록 보기
11/22
import java.io.*;
import java.util.*;

public class Solution {
	// 상하좌우
	static int[] dr = { -1, 1, 0, 0 };
	static int[] dc = { 0, 0, -1, 1 };
	static int count = 1;

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int T = Integer.parseInt(br.readLine()); // 테스트 케이스 수

		for (int test_case = 1; test_case <= T; test_case++) {
			int N = Integer.parseInt(br.readLine()); // N*N의 N 입력

			int[][] rooms = new int[N][N]; // 방 숫자 담을 배열

			for (int i = 0; i < N; i++) {
				StringTokenizer st = new StringTokenizer(br.readLine());
				for (int j = 0; j < N; j++) {
					rooms[i][j] = Integer.parseInt(st.nextToken());
				}
			}
			int room = Integer.MAX_VALUE; // 방에 적힌 번호
			int max = 0;

			// 현재 위치에서 상하좌우 방으로 갈 수 있음
			// 이동하려는 방에 적
			for (int r = 0; r < N; r++) {
				for (int c = 0; c < N; c++) {
					count = 1;
					dfs(r, c, rooms); // 현재 방의 횟수
					int temp_room = rooms[r][c]; // 현재 방에 적힌 숫자
					if (max < count) {
						max = count;
						room = temp_room;
					} else if (max == count) {
						room = (room < temp_room) ? room : temp_room;
					}
				}
			}
			sb.append("#").append(test_case).append(" ").append(room).append(" ").append(max).append("\n");
		}
		System.out.println(sb);
		br.close();
	}

	static int dfs(int r, int c, int rooms[][]) {
		for (int i = 0; i < dr.length; i++) {
			int nr = r + dr[i];
			int nc = c + dc[i];
			if (0 <= nr && nr < rooms.length && 0 <= nc && nc < rooms.length) { // 범위 안에 들어오
				if (rooms[nr][nc] - rooms[r][c] == 1) {
					count++;
					dfs(nr, nc, rooms);
				}
			}
		}
		return count;
	}
}
profile
👩🏻‍💻

0개의 댓글