본문 바로가기
알고리즘 풀이/SWEA

[SWEA][JAVA] 1974. 스도쿠 검증

by cornsilk-tea 2022. 1. 16.

문제를 풀 때 1~9까지의 합을 더하면 45인 성질을 이용해서

검사하는 영역의 합이 45가 아니면 정지시키고 바로 종료하도록 했다.

하지만 검사하는 영역이 1~9가 아니면서 합이 45일 경우에는 해결이 안 된다.

위 문제의 sample input에는 위에 해당하는 케이스가 없어서 그런지

합을 이용한 방식으로도 해결되었다.

다음에 보완하여 해결해볼 필요성이 있다.

package level_2;

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

public class SW_1974 {

	public static void main(String[] args) throws NumberFormatException, IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st;
		int[][] arr = new int[9][9];
		int T = Integer.parseInt(br.readLine());

		for (int test_case = 1; test_case <= T; test_case++) {
			for (int a = 0; a < 9; a++) {
				st = new StringTokenizer(br.readLine());
				for (int b = 0; b < 9; b++) {
					arr[a][b] = Integer.parseInt(st.nextToken());
				}
			}
			int result = 1;
			int sum = 0;
			L: for (int a = 0; a < 9; a++) {// 가로체크
				for (int b = 0; b < 9; b++) {
					sum += arr[a][b];
				}
				if (sum != 45) {
					result = 0;
					break L;
				}
				sum = 0;
			}
			sum = 0;
			L: for (int b = 0; b < 9; b++) {// 세로체크
				for (int a = 0; a < 9; a++) {
					sum += arr[a][b];
				}
				if (sum != 45) {
					result = 0;
					break L;
				}
				sum = 0;
			}
			sum = 0;
			L: for (int a = 0; a < 9; a += 3) {
				for (int b = 0; b < 9; b += 3) {
					for (int aa = a + 0; aa < a + 3; aa++) {
						for (int bb = b + 0; bb < b + 3; bb++) {
							sum += arr[aa][bb];
						}
					}
					if (sum != 45) {
						result = 0;
						break L;
					}
					sum = 0;
				}
				sum = 0;
			}
			bw.write("#" + test_case + " " + result + "\n");
		}
		bw.flush();
		bw.close();
	}

}