:: ADVANCE ::

95일차 1. omok 본문

Algorithm/일일알고리즘

95일차 1. omok

KSJ14 2014. 10. 12. 01:47
반응형

95일차 1. omok

 9단계 재귀

 

http://183.106.113.109/30stair/omok/omok.php?pname=omok

 

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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include <iostream>
using namespace std;
 
char table[20][20];
int cnt[4];
 
void right(int i, int j, char color)
{
    if(table[i][j] == color)    {
        cnt[0] += 1;
        right(i, j+1, color);
    }
    else {
        return ;
    }
}
 
void below(int i, int j, char color)
{
    if(table[i][j] == color)    {
        cnt[1] += 1;
        below(i+1, j, color);
    }
    else {
        return ;
    }
}
 
void diagonal1(int i, int j, char color)
{
    if(table[i][j] == color)    {
        cnt[2] += 1;
        diagonal1(i+1, j+1, color);
    }
    else {
        return ;
    }
}
 
void diagonal2(int i, int j, char color)
{
    if(table[i][j] == color)    {
        cnt[3] += 1;
        diagonal2(i-1, j+1, color);
    }
    else {
        return ;
    }
}
 
 
int main(void)
{
    int i, j;
 
    for(i = 1; i < 20; i++)    {
        for(j = 1; j < 20; j++)    {        
            cin >> table[i][j];
        }
    }
 
    for(i = 0; i < 20; i++)    {
        table[i][0] = '0';
    }
    for(j = 0; j < 20; j++)    {
        table[0][j] = '0';
    }
 
    for(i = 1; i < 20; i++)    {
        for(j = 1; j < 20; j++){
            if(table[i][j] == '1')    {
                if(table[i][j-1] != '1')    {
                    right(i, j, '1');
                }
                if(table[i-1][j] != '1')    {
                    below(i, j, '1');
                }
                if(table[i-1][j-1] != '1')    {
                    diagonal1(i, j, '1');
                }
                if(table[i+1][j-1] != '1')    {
                    diagonal2(i, j, '1');
                }
                for(int k = 0; k < 4; k++)    {
                    if(cnt[k] == 5)    {
                        cout << "1" << endl;
                        cout << i << " " << j << endl;
                        return 0;
                    }
                    cnt[k] = 0;
                }
            }
            else if(table[i][j] == '2')    {
                if(table[i][j-1] != '2')    {
                    right(i, j, '2');
                }
                if(table[i-1][j] != '2')    {
                    below(i, j, '2');
                }
                if(table[i-1][j-1] != '2')    {
                    diagonal1(i, j, '2');
                }
                if(table[i+1][j-1] != '2')    {
                    diagonal2(i, j, '2');
                }
                for(int k = 0; k < 4; k++)    {
                    if(cnt[k] == 5)    {
                        cout << "2" << endl;
                        cout << i << " " << j << endl;
                        return 0;
                    }
                    cnt[k] = 0;
                }
            }
        }
    }
 
    cout << "0" << endl;
    return 0;
}

 

테스트 케이스 보면서 맞추다 보니까 점점 지저분해 졌다....

정리하는 건 나중에ㅋㅋㅋ

이 문제가 역량평가였으면 못풀었을 듯... 

반응형

'Algorithm > 일일알고리즘' 카테고리의 다른 글

98일차 1. mgcd  (0) 2014.10.14
97일차 1. self_number  (0) 2014.10.13
87일차 1. cross  (0) 2014.10.08
90일차 1. sprime  (0) 2014.10.08
91일차 1. eratosthenes  (0) 2014.10.07
Comments