본문 바로가기
알고리즘/기본 더블릿 9계단

오목 더블릿

by tryotto 2019. 3. 7.
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <stdio.h>
 
int arr[30][30= { 0 };
 
int main() {    
    for (int i = 1; i <= 19; i++) {
        for (int j = 1; j <= 19; j++) {
            scanf("%d"&arr[i][j]);
        }
    }
    int i, j;
    for (i = 1; i <= 19; i++) {
        for (j = 1; j <= 19; j++) {
            if (arr[i][j] == 1) {                
                // 세로
                int k;
                for (k = 0; k < 5; k++) {
                    if (arr[i + k][j] != 1) {
                        break;
                    }
                }
                if (k == 5 && arr[i + k][j] != 1&&arr[i-1][j]!=1) {                    
                    printf("%d\n%d %d"1,i,j);
                    return 0;                    
                }
                // 가로
                for (k = 0; k < 5; k++) {
                    if (arr[i][j+k] != 1) {
                        break;
                    }
                }
                if (k == 5 && arr[i][j+k] != 1 && arr[i][j - 1!= 1) {
                    printf("%d\n%d %d"1, i, j);
                    return 0;
                }
                // 대각선 오른쪽
                for (k = 0; k < 5; k++) {
                    if (arr[i + k][j+k] != 1) {
                        break;
                    }
                }
                if (k == 5 && arr[i + k][j+k] != 1 && arr[i-1][j - 1!= 1) {
                    printf("%d\n%d %d"1, i, j);
                    return 0;
                }
                // 대각선 왼쪽
                for (k = 0; k < 5; k++) {
                    if (arr[i + k][j - k] != 1) {
                        break;
                    }
                }
                if (k == 5 && arr[i + k][j-k] != 1 && arr[i-1][j + 1!= 1) {
                    printf("%d\n%d %d"1, i+4, j-4);
                    return 0;
                }
            }
            // 2번 색깔
            if (arr[i][j] == 2) {
                // 세로
                int k;
                for (k = 0; k < 5; k++) {
                    if (arr[i + k][j] != 2) {
                        break;
                    }
                }
                if (k == 5 && arr[i + k][j] != 2 && arr[i -1][j] != 2) {
                    printf("%d\n%d %d"2, i, j);
                    return 0;
                }
                // 가로
                for (k = 0; k < 5; k++) {
                    if (arr[i][j + k] != 2) {
                        break;
                    }
                }
                if (k == 5 && arr[i][j + k] != 2 && arr[i][j - 1!= 2) {
                    printf("%d\n%d %d"2, i, j);
                    return 0;
                }
                // 대각선 오른쪽
                for (k = 0; k < 5; k++) {
                    if (arr[i + k][j + k] != 2) {
                        break;
                    }
                }
                if (k == 5 && arr[i + k][j + k] != 2 && arr[i - 1][j - 1!= 2) {
                    printf("%d\n%d %d"2, i, j);
                    return 0;
                }
                // 대각선 왼쪽
                for (k = 0; k < 5; k++) {
                    if (arr[i + k][j - k] != 2) {
                        break;
                    }
                }
                if (k == 5 && arr[i + k][j - k] != 2 && arr[i - 1][j + 1!= 2) {
                    printf("%d\n%d %d"2, i+4, j-4);
                    return 0;
                }
            }
        }
    }
    if (i == 20 && j == 20)
        printf("0");
}
cs