티스토리 뷰

1861. 정사각형 방

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LtJYKDzsDFAXc&categoryId=AV5LtJYKDzsDFAXc&categoryType=CODE&problemTitle=1861&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

import java.io.*;
import java.util.*;

// 210205 

public class Solution_D4_1861_정사각형방 {
	
	static int[][] map;
	static int N;
	static int[] dr = {-1, 1, 0, 0};
	static int[] dc = {0, 0, -1, 1}; // 상 하 좌 우
	
	static int maxCnt;
	static int minRoomNum;
	
	// 처음 출발해야 하는 방 번호 , 최대 몇개 이동 출력
	
	static void check(int r, int c, int cnt, int start) {
		for (int d=0; d<4; d++) {
			int nr = r + dr[d];
			int nc = c + dc[d];

			if (nr>=0 && nr<N && nc>=0 && nc<N ) {
				if (map[nr][nc] == (map[r][c]+1))
					check(nr, nc, cnt+1, start);
			}
			
		}
		
		if (cnt > maxCnt) {
			maxCnt = cnt;
			minRoomNum = start;
		}
		if (cnt == maxCnt) {
			minRoomNum = Math.min(minRoomNum, start);
		}
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		int T = sc.nextInt();
		
		for (int tc=1; tc<=T; tc++) {

			N = sc.nextInt();
			
			map = new int[N][N];
			maxCnt = 0;
			minRoomNum = 0;
			
			for(int r=0; r<N; r++) {
				for (int c=0; c<N; c++) {
					map[r][c] = sc.nextInt();
				}
			}
			
			for(int r=0; r<N; r++) {
				for (int c=0; c<N; c++) {
					check(r, c, 1, map[r][c]);
				}
			}
			
			System.out.println("#" + tc + " " + minRoomNum + " " + maxCnt);
			
		}
		
		sc.close();
	}

}

 

1. 재귀 두번 써서 한참 고생함^^;;; 재귀어려워..

2. 변수를 static으로 사용할거면, 테스트 케이스마다 main에서 초기화 해주기

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함