TopCoder SRM 631 Div1 Easy: TaroJiroGrid

解法

kmjp.hatenablog.jp

コード

public class TaroJiroGrid {

	public int getNumber(String[] grid) {
		int N = grid.length;
		char[][] map = new char[N][];
		for (int i = 0; i < map.length; i++) {
			map[i] = grid[i].toCharArray();
		}

		if (check(map)) {
			return 0;
		}

		char[] color = { 'W', 'B' };
		for (int c = 0; c < 2; c++) {
			for (int i = 0; i < N; i++) {
				char[][] copy = new char[N][N];
				for (int j = 0; j < N; j++) {
					for (int k = 0; k < N; k++) {
						if (j != i) {
							copy[j][k] = map[j][k];
						} else {
							copy[j][k] = color[c];
						}
					}
				}
				if (check(copy)) {
					return 1;
				}
			}
		}

		return 2;
	}

	private boolean check(char[][] map) {
		int N = map.length;
		for (int i = 0; i < N; i++) {
			int cnt = 1;
			for (int j = 1; j < N; j++) {
				if (map[j][i] == map[j - 1][i]) {
					cnt++;
				} else {
					cnt = 1;
				}
				if (cnt > N / 2) {
					return false;
				}
			}
		}
		return true;
	}
}