본문 바로가기

Algorithm

[SWEA] JAVA - 1861 정사각형방

 

package com.ssafy.off;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class SWEA_1861_정사각형방 {
/**
 * 깊이우선탐색
 * 이동할수있는 방의 개수가 동일한것이 여러개면 가장 작은 방 번호 출력
*/
	static int dy[] = {-1,1,0,0};
	static int dx[] = {0,0,-1,1};
	static int[][] map;
	static int ans;
	static int startRoom;
	//시작점부터 최대한 많은 거리를 도착했을때 내가 이동한 거리를 리턴 
	public static void dfs(int y, int x, int startVal, int[][] map, int cnt) {
		
		for (int k = 0; k < 4; k++) {
			int ny = y + dy[k];
			int nx = x + dx[k];
			
			if(ny >= 0 && ny < map.length && nx >= 0 && nx < map.length) {
				if(map[ny][nx] == map[y][x]+1) {
					dfs(ny,nx, startVal, map, ++cnt);
				}	
			}
		}
		
		if(ans < cnt) {
			ans = cnt;
			startRoom = startVal;
		}
		//같은게 여러개일때
		if(ans == cnt) {
			if(startRoom > startVal) startRoom = startVal;
		}
	}
	
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int TC = Integer.parseInt(br.readLine());
		for (int t = 1; t <= TC; t++) {
			int N = Integer.parseInt(br.readLine());
			map = new int[N][N];
			//입력
			for (int i = 0; i < N; i++) {
				StringTokenizer st = new StringTokenizer(br.readLine(), " ");
				for (int j = 0; j < N; j++) {
					map[i][j] = Integer.parseInt(st.nextToken());
				}
			}
			
			//solve
			startRoom = map[0][0];
			ans = 0;
			for (int i = 0; i < N; i++) {
				for (int j = 0; j < N; j++) {
					dfs(i,j,map[i][j],map,1);
				}
			}
			System.out.println("#"+t+" " +startRoom + " " +ans);
			
			
		}

	}

}

'Algorithm' 카테고리의 다른 글

[SWEA] JAVA - 1940. 가랏! RC카!  (0) 2021.02.08
[SWEA] JAVA - 5215 햄버거 다이어트  (0) 2021.02.08
[SWEA] JAVA - 3499 퍼펙트 셔플  (0) 2021.02.06
[SWEA] JAVA - 1210 Ladder1  (0) 2021.02.06
[SWEA] JAVA - 1873 상호의 배틀필드  (0) 2021.02.06