프로그래밍 공부

SWEA 1974 스도쿠 검증 본문

Problem Solving/SW Expert Academy

SWEA 1974 스도쿠 검증

khj1999 2023. 11. 19. 13:51
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
int arr[10][10];


int main() {
	int t;
	cin >> t;
	for (int i = 0; i < t; i++) {
		bool ans = true;
		for (int j = 0; j < 9; j++) {
			for (int k = 0; k < 9; k++) {
				cin >> arr[j][k];
			}
		}
		for (int j = 0; j < 9; j++) {
			if (!ans) break;
			int col_check[10];
			fill(col_check, col_check + 10, 0);
			for (int k = 0; k < 9; k++) {
				col_check[arr[j][k]]++;
				if (col_check[k] > 1) {
					ans = false;
					break;
				}
			}
			for (int k = 0; k < 9; k++) {
				if (col_check[k] > 1) {
					ans = false;
					break;
				}
			}
		}
		for (int j = 0; j < 9; j++) {
			if (!ans) break;
			int row_check[10];
			fill(row_check, row_check + 10, 0);
			for (int k = 0; k < 9; k++) {
				row_check[arr[k][j]]++;
				if (row_check[k] > 1) {
					ans = false;
					break;
				}
			}
			for (int k = 0; k < 9; k++) {
				if (row_check[k] > 1) {
					ans = false;
					break;
				}
			}
		}
		for (int j = 0; j < 9; j++) {
			if (!ans) break;
			for (int k = 0; k < 9; k++) {
				if (j % 3 == 0 && k % 3 == 0) {
					int mx_check[10];
					fill(mx_check, mx_check + 10, 0);
					for (int z = 0; z < 3; z++) {
						for (int x = 0; x < 3; x++) {
							mx_check[arr[j + z][k + x]]++;
						}
					}
					for (int z = 0; z < 9; z++) {
						if (mx_check[z] > 1) {
							ans = false;
							break;
						}
					}
				}
			}
		}
		cout << "#" << i + 1 << " " << ans << '\n';
	}
	return 0;
}

더 간단하게 하는 방법이 있을꺼 같았는데 찾지는 못했다

'Problem Solving > SW Expert Academy' 카테고리의 다른 글

SWEA 1204 최빈수  (0) 2023.11.19
SWEA 1209 Sum  (1) 2023.11.19
1208 Flatten  (2) 2023.11.19
1205 View  (1) 2023.11.18
1240 단순 2진 암호코드  (0) 2023.11.18
Comments