본문 바로가기

알고리즘문제풀이

[백준 16955]오목, 이길 수 있을까?

반응형

문제 :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