SW Expert Academy

[SWEA] [JAVA] [Difficulty 2] [1974] 스도쿠 검증

c0mmedes 2022. 11. 18. 15:22
 

SW Expert Academy

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

swexpertacademy.com


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

public class Solution {
	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()); // 테스트케이스 
		
		for(int tc=1; tc<=T; tc++) {
			
			int arr[][] = new int[9][9];
			
			for(int i=0; i<9; i++) {
				StringTokenizer st = new StringTokenizer(br.readLine()," ");
				for(int j=0; j<9; j++) {
					arr[i][j] = Integer.parseInt(st.nextToken());
				}
			}
			
			// 가로줄
			// boolean 형 배열을 이용하여 각줄의 수가 있을 경우 true로 초기화
			// false값이 있는 경우 조건위배 garo를 0으로 초기화
			int garo = 1;
			for(int i=0; i<9; i++) {
				boolean check[] = new boolean[10];
				for(int j=0; j<9; j++) {
					check[arr[i][j]] = true;
				}
				for(int k=1; k<10; k++) {
					if(check[k] == false) {
						garo = 0;
						break;
					}
				}
			}
			
			// 세로줄
			// 가로줄과 똑같이
			int sero = 1;
			for(int i=0; i<9; i++) {
				boolean check[] = new boolean[10];
				for(int j=0; j<9; j++) {
					check[arr[j][i]] = true;
				}
				for(int k=1; k<10; k++) {
					if(check[k] == false) {
						sero = 0;
						break;
					}
				}
			}
			

			// 격자
			// 가로줄과 똑같이
			int grid=1;
			for(int a=0; a<=6; a+=3) {
				for(int b=0; b<=6; b+=3) {
					boolean check[] = new boolean[10];
					for(int i=0; i<3; i++) {
						for(int j=0; j<3; j++) {
							check[arr[i+a][j+b]] = true;
						}
					}
					for(int k=1; k<10; k++) {
						if(check[k] == false) {
							grid = 0;
							break;
						}
					}
				}
			}
			
			int ans=0;
			if(garo*sero*grid==1) {
				ans=1;
			}
				
			// sb에 저장
			sb.append("#" + tc +' ' + ans + "\n");
		}
		
		System.out.println(sb);
		
		
	}
}