Coding Test/SW Expert Academy
[SWEA] 1974. 스도쿠 검증 c++
owls
2022. 11. 16. 16:33
728x90
- 문제
9 X 9 크기의 스도쿠 퍼즐의 숫자들이 주어졌을 때, 위와 같이 겹치는 숫자가 없을 경우, 1을 정답으로 출력하고 그렇지 않을 경우 0 을 출력한다.
- 문제 해결
처음에는 1~9 까지의 합을 이용해서 문제를 풀어나갔지만, 10개 test중 5개만 계속 통과해서
방법을 바꾸었다.
1~9가 나왔는지 검사하는 방법으로 풀었다.
#include<iostream>
#include <map>
#include <memory.h>
using namespace std;
int main(int argc, char** argv)
{
int test_case;
int T;
cin>>T;
for(test_case = 1; test_case <= T; ++test_case)
{
int board[10][10];
bool check[3][10][10];
memset( check, false, sizeof(check));
for(int i = 1; i < 10; i++){
for(int j = 1; j < 10; j++){
cin >> board[i][j];
check[0][i][board[i][j]] = true; //행 검사
check[1][j][board[i][j]] = true; //열 검사
int index = ((i - 1) / 3) * 3 +1 + (j - 1) / 3;
check[2][index][board[i][j]] = true; // 그룹 검사
}
}
int res = 1;
for(int i = 0; i < 3; i++){
for(int j = 1; j < 10; j++){
for(int k = 1; k < 10; k++){
if( !check[i][j][k]){
res = 0;
break;
}
}
}
}
cout << "#" << test_case << " " << res << endl;
}
return 0;
}
테스트 실패 코드
#include<iostream>
#include <vector>
using namespace std;
int main(int argc, char** argv)
{
int test_case;
int T;
cin>>T;
for(test_case = 1; test_case <= T; ++test_case)
{
int res = 1;
int index =0;
vector<int> group( 9, 0);
int total = (9 * 10 ) / 2;
int vec[9][9];
for(int i = 0; i < 9; i++){
int row = 0, col = 0;
for(int j = 0; j < 9; j++){
row += vec[i][j];
col += vec[j][i];
index = ((j) / 3) + ((i) / 3) * 3;
group[index] += vec[i][j];
}
if( row != total || col != total){
res = 0;
}
}
for(int i = 0; i < 9; i++){
if( group[i] != total){
res = 0;
}
}
cout << "#" << test_case << " " << res << endl;
}
return 0;//정상종료시 반드시 0을 리턴해야합니다.
}
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
int main(){
vector<vector<int>> vec = {
{7, 3, 6, 4, 2, 9, 5, 8, 1},
{5, 8, 9, 1, 6, 7, 3, 2, 4},
{2, 1, 4, 5, 8, 3, 6, 9, 7},
{8 ,4 ,7 ,9 ,3 ,6 ,1 ,5 ,2},
{1, 5, 3, 8, 4, 2, 9, 7, 6},
{9 ,6 ,2 ,7 ,5 ,1 ,8 ,4 ,3},
{4 ,2 ,1 ,3, 9, 8, 7, 6, 5},
{3, 9, 5, 6, 7, 4, 2, 1, 8},
{6 ,7 ,8 ,2 ,1, 5 ,4 ,3 ,9},
};
int index =0;
vector<int> group( 9, 0);
int total = (9 * 10 ) / 2;
for(int i = 0; i < 9; i++){
int row = 0, col = 0;
for(int j = 0; j < 9; j++){
row += vec[i][j];
col += vec[j][i];
index = j / 3 + (i / 3) * 3;
group[index] += vec[i][j];
}
if( row != total || col != total){
cout << "#" << 1 << " " << 0 << endl;
return 0;
}
}
for(auto &it : group){
if( it != total){
cout << "#" << 1 << " " << 0 << endl;
return 0;
}
}
cout << "#" << 1 << " " << 1 << endl;
return 0;
}
728x90