[白俊3085]キャンディゲーム-Java




問題を完全に探索し,再帰関数を用いて実現することを考慮し,最終的には右,下の値を比較して順次検索すればよいのでfor文で実現する.
実は問題を解く時少し混同しました
すべての人は同じ色からなる最長の連続部分を選んで、すべてのキャンディを食べてしまいます.
最初、私は一行で砂糖を食べて、最大の数を見つけたいと思っていました.でも.
質問の通り、一番長い連続部分を見つけて、その部分を食べればいいのです.
次のコードで実現すればいいです.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
 
public class Main {

	static int N;
	static int result = Integer.MIN_VALUE;
	static void calculate(char[][] b) {

		// 행 비교하여 가장 긴 연속 부분을 찾아 사탕을 먹는다
		for(int i = 0 ; i < N; i++) {
			int sum1 = 1;
			for(int j = 0 ; j < N-1; j++) {
				if(b[i][j] == b[i][j+1]) {
					sum1++;
				} else {
					sum1 = 1;	
				}
				result = Math.max(result, sum1);
			}
		}
		
        // 열 비교하여 가장 긴 연속 부분을 찾아 사탕을 먹는다
        // 다른 방법으로 열을 비교해봤다.
	    int j = 0;
		while(true) {
			int sum2 = 1;
			for(int i = 0 ; i < b.length-1; i++) {
				if(b[i][j] == b[i+1][j]) {
					sum2++;
				} else {
					sum2 = 1;
				}
				result = Math.max(result, sum2);
			}

			if(j == b.length-1) {
				break;
			}
			j++;
		}

	}
	
	public static void main(String[] args) throws IOException {
        
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		N = Integer.parseInt(br.readLine());
		String a = "";
		
		char[][] b = new char[N][N];
		for(int i = 0 ; i < N; i ++) {
			a = br.readLine();
			for(int j = 0 ; j < N; j ++) {
				b[i][j] = a.charAt(j); 
			}
		}

		// 아무것도 교환하지 않았을때
		calculate(b);

		// 행 비교
		for(int i = 0 ; i < N; i++) {
			for(int j = 0 ; j < N-1; j++) {
				if(b[i][j] != b[i][j+1]) {
					// 스왑
				    char temp = b[i][j];
	                b[i][j] = b[i][j + 1];
	                b[i][j + 1] = temp;

	                calculate(b);
	                
                    // 원래대로
	                temp = b[i][j];
	                b[i][j] = b[i][j + 1];
	                b[i][j + 1] = temp;
				}
			}
		}
		
		// 열 비교
		for(int i = 0 ; i < N; i++) {
			for(int j = 0 ; j < N-1; j++) {
				if(b[j][i] != b[j+1][i]) {
					// 스왑
				    char temp = b[j][i];
	                b[j][i] = b[j + 1][i];
	                b[j + 1][i] = temp;

	                calculate(b);
	                
                    // 원래대로
				    temp = b[j][i];
	                b[j][i] = b[j + 1][i];
	                b[j + 1][i] = temp;
				}
			}
		}

		
		System.out.print(result);
		
	}


}