반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
05-18 06:40
관리 메뉴

ImJay

[SWEA/Java] 1974. 스도쿠 검증 본문

SW Expert Academy/D2

[SWEA/Java] 1974. 스도쿠 검증

ImJay 2024. 1. 22. 00:21
반응형

[SWEA/Java] 1974. 스도쿠 검증

 

SW Expert Academy

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

swexpertacademy.com


해설

풀이

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

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        // 테스트 케이스의 개수 T 입력
        int test_case = Integer.parseInt(br.readLine());

        // 각 테스트 케이스에 대한 반복
        L: for (int t = 1; t <= test_case; t++) {
            int[][] graph = new int[9][9];

            // 9x9 크기의 스도쿠 퍼즐 데이터 입력
            for (int r = 0; r < 9; r++) {
                String row = br.readLine();
                StringTokenizer st = new StringTokenizer(row);
                for (int c = 0; c < 9; c++) {
                    graph[r][c] = Integer.parseInt(st.nextToken());
                }
            }

            // 각 행에 대한 검사
            for (int r = 0; r < 9; r++) {
                boolean[] status = new boolean[9];
                for (int c = 0; c < 9; c++) {
                    status[graph[r][c] - 1] = true;
                }
                // 중복된 숫자가 있는지 확인
                for (int i = 0; i < 9; i++) {
                    if (!status[i]) {
                        sb.append("#" + t + " 0\n");
                        continue L;
                    }
                }
            }

            // 3x3 작은 격자에 대한 검사
            for (int i = 0; i < 9; i += 3) {
                boolean[] status = new boolean[9];
                for (int r = i; r < i + 3; r++) {
                    for (int c = i; c < i + 3; c++) {
                        status[graph[r][c] - 1] = true;
                    }
                }
                // 중복된 숫자가 있는지 확인
                for (int j = 0; j < 9; j++) {
                    if (!status[j]) {
                        sb.append("#" + t + " 0\n");
                        continue L;
                    }
                }
            }

            // 각 열에 대한 검사
            for (int r = 0; r < 9; r++) {
                boolean[] status = new boolean[9];
                for (int c = 0; c < 9; c++) {
                    status[graph[c][r] - 1] = true;
                }
                // 중복된 숫자가 있는지 확인
                for (int i = 0; i < 9; i++) {
                    if (!status[i]) {
                        sb.append("#" + t + " 0\n");
                        continue L;
                    }
                }
            }

            // 중복된 숫자가 없는 경우 정답 출력
            sb.append("#" + t + " 1\n");
        }
        // 최종 결과 출력
        System.out.println(sb);
    }
}
반응형
Comments