Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- set
- 아두이노 소스
- 컴퓨터 그래픽스
- 자료구조
- priority_queue
- 아두이노 컴파일러
- 수광 소자
- Algorithm
- vector
- html
- 라인트레이서
- stl
- LineTracer
- Arduino
- arduino compiler
- map
- 아두이노
- C언어
- 운영체제
- Array
- c++
- Visual Micro
- directx
- list
- queue
- 시스템프로그래밍
- WinAPI
- 통계학
- Stack
- Deque
Archives
- Today
- Total
Kim's Programming
1974. 스도쿠 검증 본문
1974. 스도쿠 검증
풀이 방법
가로 줄 체크, 세로 줄 체크, 정사각형 체크를 하되 하나라도 실패할 경우 바로 실패로 처리한다.
<코드>
#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 |