SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
9x9 판이 주어지면 가로, 세로, 3x3 구간에 각 숫자들이 1 ~ 9까지 들어있는지 확인하는 문제다.
깡 구현 문제인데 가로, 세로는 쉽게 구현할 수 있고 3x3 사이즈도 조금만 생각해보면 쉽게 풀린다.
#include <bits/stdc++.h>
using namespace std;
int ar[9][9];
bool vis[9];
bool chk() { //가로
int sum = 0;
for (int i = 0; i < 9; ++i) {
sum = 0;
for (int j = 0; j < 9; ++j) {
sum += ar[i][j];
}
if (sum != 45) return false;
}
return true;
}
bool chk2() { //세로
int sum = 0;
for (int i = 0; i < 9; ++i) {
sum = 0;
for (int j = 0; j < 9; ++j) {
sum += ar[j][i];
}
if (sum != 45) return false;
}
return true;
}
bool chk3(int x, int y) { //3x3
fill(vis, vis + 9, false);
for (int i = x; i < x + 3; ++i) {
for (int j = y; j < y + 3; ++j) {
if (vis[ar[i][j] - 1]) return false;
vis[ar[i][j] - 1] = true;
}
}
return true;
}
int main() {
//ios::sync_with_stdio(false); cin.tie(0);
int TC;
cin >> TC;
for (int tc = 1; tc <= TC; ++tc) {
for (int i = 0; i < 9; ++i) {
for (int j = 0; j < 9; ++j) {
cin >> ar[i][j];
}
}
bool end = false;
if (!chk()) {
cout << '#' << tc << ' ' << 0 << '\n'; continue;
}
if (!chk2()) {
cout << '#' << tc << ' ' << 0 << '\n'; continue;
}
for (int i = 0; i <= 6; i += 3) {
for (int j = 0; j <= 6; j += 3) {
if (!chk3(i, j)) {
end = true; break;
}
}
if (end) break;
}
if (end) {
cout << '#' << tc << ' ' << 0 << '\n'; continue;
}
cout << '#' << tc << ' ' << 1 << '\n';
}
return 0;
}
가로와 세로 부분은 각 줄의 합이 45가 아니라면 잘못된 스도쿠니까 0을 출력시켜주고 chk3 함수에서 3x3은
각 숫자들이 방문했는지 vis 배열을 통해서 처리해줬다.
'SWEA' 카테고리의 다른 글
SWEA 숫자 배열 회전 (0) | 2020.10.30 |
---|---|
SWEA 1859 백만 장자 프로젝트 (0) | 2020.10.28 |