https://www.acmicpc.net/problem/2615
2615번: 오목
오목은 바둑판에 검은 바둑알과 흰 바둑알을 교대로 놓아서 겨루는 게임이다. 바둑판에는 19개의 가로줄과 19개의 세로줄이 그려져 있는데 가로줄은 위에서부터 아래로 1번, 2번, ... ,19번의 번호
www.acmicpc.net
문제해석
오목판의 상태가 주어지면 흑의 승리이면 1을 백의 승리이면 2를 출력한 후 가장 왼쪽에 있는 바둑돌의 좌표를 출력 하고 아직 승부가 안났으면 0을 출력하는 문제이다.
다행히 흑 백이 동시에 이기는 경우 , 흑 또는 백이 두군데 이상에서 동시에 이기는 경우는 입력으로 들어오지 않기 때문에 1,1부터 19,19까지 전부 탐색을해서 흑이나 백이 가로 , 세로 , 대각선으로 딱 5개있는 경우(6목이상 안됨)가 있다면 그 색이 승리하고 없다면 0을 출력하게 만들었다.
가로와 세로로 이기는 경우에는 왼쪽 맨 위 부터 세면되지만, 대각선으로 이기는 경우에는 조금 다른경우가 있었다.
y=-x방향으로 이기는 경우 역시 왼쪽 맨위부터 세면되지만 y=x 방향으로 이길 때는 오른쪽 맨위에서 왼쪽 대각선으로 세 주어야 하기 때문에 일부러 배열을 19x19보다 크게 잡고 1,1이 아닌 넉넉하게 10,10에서 시작하고 좌표를 출력할때 9씩 빼주었다.
오목인지 아닌지 판별을 그냥 빡구현 시켰다.
코드
#include <iostream>
#include <algorithm>
using namespace std;
int a[50][50];
int main(){
cout.tie(NULL);
cin.tie(NULL);
ios_base::sync_with_stdio(false);
for(int i=10; i<29; i++)
{
for(int j=10; j<29; j++)
{
cin>>a[i][j];
}
}
for(int i=10; i<29; i++)
{
for(int j=10; j<29; j++)
{
if(a[i][j-1]!=1&&a[i][j]==1&&a[i][j+1]==1&&a[i][j+2]==1&&a[i][j+3]==1&&a[i][j+4]==1&&a[i][j+5]!=1)
{
cout<<1<<"\n";
cout<<i-9<<" "<<j-9;
return 0;
}
else if(a[i][j-1]!=2&&a[i][j]==2&&a[i][j+1]==2&&a[i][j+2]==2&&a[i][j+3]==2&&a[i][j+4]==2&&a[i][j+5]!=2)
{
cout<<2<<"\n";
cout<<i-9<<" "<<j-9;
return 0;
}
else if(a[i-1][j]!=1&&a[i][j]==1&&a[i+1][j]==1&&a[i+2][j]==1&&a[i+3][j]==1&&a[i+4][j]==1&&a[i+5][j]!=1)
{
cout<<1<<"\n";
cout<<i-9<<" "<<j-9;
return 0;
}
else if(a[i-1][j]!=2&&a[i][j]==2&&a[i+1][j]==2&&a[i+2][j]==2&&a[i+3][j]==2&&a[i+4][j]==2&&a[i+5][j]!=2)
{
cout<<2<<"\n";
cout<<i-9<<" "<<j-9;
return 0;
}
else if(a[i-1][j-1]!=1&&a[i][j]==1&&a[i+1][j+1]==1&&a[i+2][j+2]==1&&a[i+3][j+3]==1&&a[i+4][j+4]==1&&a[i+5][j+5]!=1)
{
cout<<1<<"\n";
cout<<i-9<<" "<<j-9;
return 0;
}
else if(a[i-1][j-1]!=2&&a[i][j]==2&&a[i+1][j+1]==2&&a[i+2][j+2]==2&&a[i+3][j+3]==2&&a[i+4][j+4]==2&&a[i+5][j+5]!=2)
{
cout<<2<<"\n";
cout<<i-9<<" "<<j-9;
return 0;
}
else if(a[i-1][j+1]!=1&&a[i][j]==1&&a[i+1][j-1]==1&&a[i+2][j-2]==1&&a[i+3][j-3]==1&&a[i+4][j-4]==1&&a[i+5][j-5]!=1)
{
cout<<1<<"\n";
cout<<i-5<<" "<<j-13;
return 0;
}
else if(a[i-1][j+1]!=2&&a[i][j]==2&&a[i+1][j-1]==2&&a[i+2][j-2]==2&&a[i+3][j-3]==2&&a[i+4][j-4]==2&&a[i+5][j-5]!=2)
{
cout<<2<<"\n";
cout<<i-5<<" "<<j-13;
return 0;
}
}
}
cout<<0<<"\n";
return 0;
}
'백준문제풀이' 카테고리의 다른 글
백준 문제 11758번 CCW 문제풀이 c++ (0) | 2022.03.13 |
---|---|
백준 문제 1041번 주사위 문제풀이 c++ (0) | 2022.03.07 |
백준 문제 24499번 blobyum 문제풀이 c++ (0) | 2022.03.07 |
백준 문제 24498번 blobnom 문제풀이 c++ (0) | 2022.03.06 |
백준 문제 14398번 피타고라스 수 문제풀이 c++ (0) | 2022.03.06 |