알고리즘 역량테스트 문제/SWEA
[SWEA][D2][c++] 1974. 스도쿠 검증
coooding
2020. 7. 4. 03:54
문제
1974. 스도쿠 검증
문제 링크
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Psz16AYEDFAUq
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
풀이과정
가로, 세로, 사각형의 범위를 구분하여 두번 이상 같은 숫자를 이용하면 false를 리턴하였습니다.
코드
#include<iostream>
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 map[9][9];
bool result=true;
//입력
for(int i=0; i<9; i++){
for(int j=0; j<9; j++){
cin >> map[i][j];
}
}
//가로
for(int i=0; i<9; i++){
if(!result) break; // 앞에서 한번이라도 불만족시 break
int check[9]={0,};
for(int j=0; j<9; j++){
if(check[map[i][j]-1]>0){
result=false;
break;
}
else
check[map[i][j]-1]+=1;
}
}
//세로
for(int i=0; i<9; i++){
if(!result) break; // 앞에서 한번이라도 불만족시 break
int check[9]={0,};
for(int j=0; j<9; j++){
if(check[map[j][i]-1]>0){
result=false;
break;
}
else
check[map[j][i]-1]+=1;
}
}
//3*3 사각형
for(int i = 0; i < 3; i++) {
if(!result) break; // 앞에서 한번이라도 불만족시 break
for(int j = 0; j < 3; j++) {
int check[9]={0,};
for(int k = 0; k < 3; k++) {
for(int s = 0; s < 3; s++) {
if(check[map[3*i + k][3*j + s]-1]>0){
result=false;
break;
}
else
check[map[3*i + k][3*j + s]-1]+=1;
}
}
}
}
cout <<"#"<<test_case<<" "<<result<<"\n";
}
return 0;
}