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 | #include <iostream> #define MAX 19 using namespace std; int map[MAX + 1][MAX + 1] = { { 0, 0 } }; //d:방향, count:갯수 bool chk(int y, int x , int d, int count, int color) { //count 6까지 가봐야 돌이 있는지 알 수 있으니까 count > 6 if (x < 0 || y < 0 || x > MAX + 1 || y > MAX + 1 || count > 6) return false; if (map[y][x] == color){ switch (d) { //방향x case 0: //순서대로 1번방향에 돌이 있고 반대 방향에 돌이 같은 색이 아닐때 return ((map[y + 1][x - 1] != color) && chk(y - 1, x + 1, 1, 2, color)) || ((map[y][x - 1] != color) && chk(y, x + 1, 2, 2, color)) || ((map[y - 1][x - 1] != color) && chk(y + 1, x+1, 3, 2, color)) || ((map[y - 1][x] != color) && chk(y + 1, x, 4, 2, color)); //방향 o, 1시방향부터 1 case 1: return chk(y - 1, x + 1, d, count+1, color); case 2: return chk(y, x + 1, d, count+1, color); case 3: return chk( y + 1, x + 1, d, count+1, color); case 4: return chk(y + 1, x, d, count+1, color); } } else { if (count == 6) return true; } return false; } int main() { for (int i = 1; i < 20; i++){ for (int j = 1; j < 20; j++) cin >> map[i][j]; } for (int i = 1; i < 20; i++){ for (int j = 1; j < 20; j++) { // 바둑 있냐 if (map[i][j] > 0) { //오목 if (chk(i, j, 0, 1, map[i][j])) { cout << map[i][j] << endl << i << " " << j; return 0; } } } } //비김 cout << 0; return 0; } |