문제 :https://www.acmicpc.net/problem/16955
1)문제분류
-구현
2)문제 해결
-구사과가 X이므로 맵에서 X의 위치에서 가로, 세로, 대각선 방향을 모두 탐색한다.
-탐색 하는데, X를 놓을 공간인 .가 하나 존재하고, X가 4개 이상이라면 구사과가 승리!
#include<iostream>
using namespace std;
int xrr[8] = { -1,-1,-1,0,0,1,1,1};
int yrr[8] = {-1,0,1,-1,1,-1,0,1};
char map[502][502];
int search(int x, int y)
{
//cout << x << " " << y << endl;
for (int i = 0; i < 8; i++)
{
int cx = x;
int cy = y;
int cnt = 1; //구사과 돌 개수
int empty = 0;//빈공간
for (int j = 0; j < 4; j++)
{
int curx = cx + xrr[i];
int cury = cy + yrr[i];
if (0 <= curx&&curx < 10 && 0 <= cury&&cury < 10)
{
if (map[curx][cury] == 'X')
cnt++;
if (map[curx][cury] == '.')
empty++;
cx = curx;
cy = cury; //해당방향의 그 다음 돌 검색
}
else
break;
}
if (cnt == 4 && empty == 1)return 1;
}
return 0;
}
int main()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
cin >> map[i][j];
}
}
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (map[i][j] == 'X')
{
if (search(i, j))
{
cout << 1 << endl;
return 0;
}
}
}
}
cout << 0 << endl;
return 0;
}
'알고리즘문제풀이' 카테고리의 다른 글
[백준 16933]벽 부수고 이동하기 3 (0) | 2019.02.20 |
---|---|
[백준 16957]체스판 위의 공 (0) | 2019.02.20 |
[백준 16956]늑대와 양 (0) | 2019.02.19 |
[백준 1173]운동 (0) | 2019.02.19 |
[백준 3109]빵집 (0) | 2019.02.19 |