#include <stdio.h>
using namespace std;
int N;
int dx[8] = {0,0,1,-1,-1,1,-1,1};
int dy[8] = {-1,1,0,0,1,1,-1,-1};
char omok[20][20];
bool solve(int x, int y)
{
int cx = x;
int cy = y;
for (int i = 0; i < 8; i++)
{
bool flag = true;
int nx = cx + dx[i];
int ny = cy + dy[i];
if (nx < 0 || ny < 0 || nx >= N || ny >= N || omok[nx][ny] == '.')
continue;
for (int j = 0; j < 3; j++) // (cx, cy)와 (nx, ny)에 o가 있기때문에 3번 반복
{
nx = nx + dx[i];
ny = ny + dy[i];
if (nx < 0 || ny < 0 || nx >= N || ny >= N || omok[nx][ny] == '.')
{
flag = false;
break;
}
}
if (flag)
return true;
}
return false;
}
int main()
{
int tc = 0;
scanf("%d", &tc);
for (int t = 1; t <= tc; t++)
{
bool flag = false;
scanf("%d", &N);
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
scanf(" %c", &omok[i][j]);
}
}
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
if (omok[i][j] == 'o' && solve(i, j))
flag = true;
if(flag)
break;
}
if(flag)
break;
}
if (flag)
printf("#%d YES\n", t);
else
printf("#%d NO\n", t);
}
return 0;
}
1. 8방향으로 o가 있는지 탐색
2. 탐색이 한번이라도 성공하면 return true
3. 끝!!
'공부 > SWEA' 카테고리의 다른 글
SWEA 19113. 식료품 가게 (C++) (0) | 2024.05.10 |
---|---|
SWEA 9839. 최고의 쌍 (C++) (0) | 2024.05.08 |
SWEA 9778. 카드 게임 (C++) (0) | 2024.05.06 |
SWEA 3975. 승률 비교하기 (C++) (0) | 2024.05.06 |
SWEA 5986. 새샘이와 세 소수 (C++) (0) | 2024.05.06 |