아직은 정체성이 없는 블로그

[SWEA][D2][c++] 1974. 스도쿠 검증 본문

알고리즘 역량테스트 문제/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;
}
Comments