본문 바로가기
온라인 저지/SWEA

[SWEA/Java] 1974 스도쿠 검증

by ahj 2022. 2. 18.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class SWEA1974 {

	static int[][] sudoku = new int[9][9];

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int T = Integer.parseInt(br.readLine());
		StringTokenizer st;
		for (int tc = 1; tc <= T; tc++) {
			for (int i = 0; i < 9; i++) {
				st = new StringTokenizer(br.readLine());
				for (int j = 0; j < 9; j++) {
					sudoku[i][j] = Integer.parseInt(st.nextToken());
				}
			}
//			sb.append("#").append(tc).append(" ").append(check()).append("\n");
			sb.append(String.format("#%d %d%n", tc, check()));
		}
		br.close();
		System.out.println(sb);
	}

	private static int check() {
		// 1row씩 돌아가면서 check
		for (int i = 0; i < 9; i++) {
			int sum = 0;
			for (int j = 0; j < 9; j++) {
				sum += sudoku[i][j];
			}
			if (sum != 45)
				return 0;
		}
		// 1col씩 돌아가면서 check
		for (int i = 0; i < 9; i++) {
			int sum = 0;
			for (int j = 0; j < 9; j++) {
				sum += sudoku[j][i];
			}
			if (sum != 45)
				return 0;
		}
		// 9칸씩 돌아가면서 check
		for (int i = 0; i < 9; i += 3) {
			for (int j = 0; j < 9; j += 3) {
				if (!areaCheck(i, j))
					return 0;
			}
		}
		// 45 check로 해줄 때 예외는 전부 다 5로 들어 경우 밖에 없다 check
		if (sudoku[0][0] == sudoku[0][1])
			return 0;
		return 1;
	}

	private static boolean areaCheck(int r, int c) {
		int sum = 0;
		for (int i = r; i < r + 3; i++) {
			for (int j = c; j < c + 3; j++) {
				sum += sudoku[i][j];
			}
		}
		if (sum != 45)
			return false;
		return true;
	}

}

솔직히 그냥 아이디어로 푼 문제

재귀 연습해보기 좋은 문제다.

댓글