[SWEA] 1974.스도쿠 검증(D2)

ERror.ASER·2021년 2월 8일
0

SW Expert Academy

목록 보기
7/11
post-thumbnail

문제 - 1974.스도쿠 검증(D2)

풀이

스도쿠 문제! 3x3격자 탐색이 약간 그랬지만 어려운 문제는 아니었다..
근데 인덱스 j를 적어야할걸 i를 적고, isSelected함수를 이상한 곳에서 재할당 해줘서 삽질을 했다ㅠㅠ
난이도는 D2이지만 가로탐색, 세로 탐색, 격자 탐색을 해줘야해서 코드 작성하는데 시간이 쫌 걸린다!!

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Solution {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int tc = Integer.parseInt(br.readLine());
		
		for(int t=1; t<=tc; t++) {
			int[][] numbers = new int[9][9];
			int[] isSelected;
			boolean flag = false;

			for(int i=0; i<9; i++) {//스도쿠 입력받기
				StringTokenizer st = new StringTokenizer(br.readLine());
				for(int j=0; j<9; j++) {
					numbers[i][j] = Integer.parseInt(st.nextToken());
				}
			}

			for(int i=0; i<9; i++) {//가로 탐색
				isSelected = new int[9];
				for(int j=0; j<9; j++) {
					isSelected[numbers[i][j]-1]=1;//가로 탐색
				}
				for(int z=0; z<9; z++) {
					if(isSelected[z] == 0) {
						flag = true;
						break;
					}
				}
			}

			//세로 탐색
			for(int i=0; i<9; i++) {
				isSelected = new int[9];
				for(int j=0; j<9; j++) {
					isSelected[numbers[j][i]-1]=1;//세로 탐색
				}
				for(int z=0; z<9; z++) {
					if(isSelected[z] == 0) {
						flag = true;
						break;
					}
				}
			}

			//3x3체크
			isSelected = new int[9];
			for(int i = 0; i<=6; i+=3) {

				for(int j=0; j<=6; j+=3) {
					isSelected = new int[9];
					for(int x = i; x<i+3; x++) {
						for(int y = j; y<j+3; y++) {
							isSelected[numbers[x][y]-1]=1;
						}
					}
				}
				for(int z=0; z<9; z++) {

					if(isSelected[z] == 0) {
						flag = true;
						break;
					}
				}
			}

			if(flag)
				System.out.println("#"+t+" "+0);
			else
				System.out.println("#"+t+" "+1);

		}
	}
}
profile
지우의 블로그

0개의 댓글