관리 메뉴

Kim's Programming

1974. 스도쿠 검증 본문

SW ExpertAcademy/D2

1974. 스도쿠 검증

Programmer. 2018. 12. 1. 02:10

1974. 스도쿠 검증

문제출처: https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Psz16AYEDFAUq&categoryId=AV5Psz16AYEDFAUq&categoryType=CODE




풀이 방법


가로 줄 체크, 세로 줄 체크, 정사각형 체크를 하되 하나라도 실패할 경우 바로 실패로 처리한다.


<코드>


#include <iostream>
#include <cstring>
#include <cmath>
#include <climits>
#include <vector>
using namespace std;

int board[9][9];

bool checkerSquare(std::pair<int, int> startPos)
{
	bool checker[10];
	memset(checker, 0, sizeof(checker));

	for (int i = 0; i < 3; i++)
		for (int j = 0; j < 3; j++)
			checker[board[startPos.first + j][startPos.second + i]] = true;

	for (int i = 1; i <= 9; i++)
		if (!checker[i])
			return false;

	return true;
}

bool checkerRow(int startPosY)
{
	bool checker[10];
	memset(checker, 0, sizeof(checker));

	for (int i = 0; i < 9; i++)
		checker[board[i][startPosY]] = true;

	for (int i = 1; i <= 9; i++)
		if (!checker[i])
			return false;

	return true;
}

bool checkerCol(int startPosX)
{
	bool checker[10];
	memset(checker, 0, sizeof(checker));

	for (int i = 0; i < 9; i++)
		checker[board[startPosX][i]] = true;

	for (int i = 1; i <= 9; i++)
		if (!checker[i])
			return false;

	return true;
}


int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	//freopen("input.txt", "r", stdin);

	int T;
	std::cin >> T;
	
	for (int test_case = 1; test_case <= T; ++test_case)
	{
		for (int i = 0; i < 9; i++)
			for (int j = 0; j < 9; j++)
				std::cin >> board[j][i];

		bool isOk = true;

		for (int i = 0; i < 9; i += 3)
		{
			for (int j = 0; j < 9; j += 3)
			{
				isOk = checkerSquare(std::make_pair(j, i));
				if (!isOk) break;
			}
			if (!isOk) break;
		}

		if (isOk)
		{
			for (int i = 0; i < 9; i++)
			{
				isOk = checkerRow(i);
				if (!isOk) break;
			}
		}

		if (isOk)
		{
			for (int i = 0; i < 9; i++)
			{
				isOk = checkerCol(i);
				if (!isOk) break;
			}
		}

		std::cout << "#" << test_case << " " << isOk << "\n";
	}

	return 0;
}


'SW ExpertAcademy > D2' 카테고리의 다른 글

1979. 어디에 단어가 들어갈 수 있을까  (0) 2018.12.01
1976. 시각 덧셈  (0) 2018.12.01
1970. 쉬운 거스름돈  (0) 2018.12.01
1966. 숫자를 정렬하자  (0) 2018.12.01
1961. 숫자 배열 회전  (0) 2018.12.01