반응형
문제 출처 :
https://www.acmicpc.net/problem/9291
알고리즘 분석 :
문제 해결에 필요한 사항
1. 구현
3가지 채점 과정만 구현하면 된다.
1. 모든 행마다 합이 45인지 검사
2. 모든 열마다 합이 45인지 검사
3. 3*3짜리 칸들 9개가 각각 합이 45인지 검사
위의 과정 3개는 3가지 함수를 제작하여 구현할 수 있고, 구현 중 쉬운 문제에 속하는 것 같다.
소스 코드 :
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | #include <iostream> #include <cstdio> #include <memory.h> #define ans 45 int map[11][11]; bool checkRow() { for (int j = 0; j < 9; j++) { int sum = 0; for (int i = 0; i < 9; i++) sum += map[i][j]; if (sum != ans) return false; } return true; } bool checkCol() { for (int i = 0; i < 9; i++) { int sum = 0; for (int j = 0; j < 9; j++) sum += map[i][j]; if (sum != ans) return false; } return true; } bool checkMid() { int x = 0; int y = 0; int tc = 9; // 3*3짜리 9개 while (tc--) { int sum = 0; for (int i = y; i < y + 3; i++) for (int j = x; j < x + 3; j++) sum += map[i][j]; if (sum != ans) return false; if (x < 6) x += 3; else { y += 3; x = 0; } if (y > 7) break; } return true; } int main() { int n; scanf("%d", &n); for(int tc = 1; tc <=n ; tc++) { for (int i = 0; i < 9; i++) for (int j = 0; j < 9; j++) scanf("%d", &map[i][j]); if (checkRow() && checkCol() && checkMid()) printf("Case %d: CORRECT\n",tc); else printf("Case %d: INCORRECT\n",tc); } return 0; } // This source code Copyright belongs to Crocus // If you want to see more? click here >> | Crocus |
반응형
'Applied > 알고리즘 문제풀이' 카테고리의 다른 글
[1074번] Z (0) | 2017.04.22 |
---|---|
[1780번] 종이의 개수 (0) | 2017.04.22 |
[1992번] 쿼드트리 (0) | 2017.04.22 |
[2261번] 가장 가까운 두 점 (0) | 2017.04.21 |
[11945번] 뜨거운 붕어빵 (0) | 2017.04.21 |