2615번: 오목
오목은 바둑판에 검은 바둑알과 흰 바둑알을 교대로 놓아서 겨루는 게임이다. 바둑판에는 19개의 가로줄과 19개의 세로줄이 그려져 있는데 가로줄은 위에서부터 아래로 1번, 2번, ... ,19번의 번호
www.acmicpc.net
반례↓
글 읽기 - 누가 기침소리를 내었는가?
댓글을 작성하려면 로그인해야 합니다.
www.acmicpc.net
틀린 이유
- 6개 이상일 경우 → 이전 값까지 모두 확인해야 한다. 이전 값이 없을 때만 온전히 5개인지 검사할 수 있다.
- visit를 쓸 경우 관계 없는 경우의 새로운 케이스에 대해 검사하지 못한다.
#include<stdio.h>
int a[19+2][19+2];
int main()
{
int i, j;
for(i=1; i<=19; i++)
for(j=1; j<=19; j++)
scanf("%d", &a[i][j]);
for(i=1; i<=19; i++)
for(j=1; j<=19; j++)
if(a[i][j]!=0){
if(a[i][j‐1]!=a[i][j] && search1(a[i][j], i, j, 1)==1){
printf("%d\n%d %d", a[i][j], i, j);
return 0;}
if(a[i‐1][j‐1]!=a[i][j] && search2(a[i][j], i, j, 1)==1){
printf("%d\n%d %d", a[i][j], i, j);
return 0;}
if(a[i‐1][j]!=a[i][j] && search3(a[i][j], i, j, 1)==1){
printf("%d\n%d %d", a[i][j], i, j);
return 0;}
if(a[i+1][j‐1]!=a[i][j] && search4(a[i][j], i, j, 1)==1){
printf("%d\n%d %d", a[i][j], i, j);
return 0;}
}
printf("0");
return 0;
}
int search1(int color, int i, int j, int cnt)
{
for(; color==a[i][j+1]; j++)
cnt++;
return cnt==5 ? 1:0;
}
int search2(int color, int i, int j, int cnt)
{
for(; color==a[i+1][j+1]; i++, j++)
cnt++;
return cnt==5 ? 1:0;
}
int search3(int color, int i, int j, int cnt)
{
for(; color==a[i+1][j]; i++)
cnt++;
return cnt==5 ? 1:0;
}
int search4(int color, int i, int j, int cnt)
{
for(; color==a[i‐1][j+1]; i‐‐,j++)
cnt++;
return cnt==5 ? 1:0;
}
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 2579 계단 오르기 (0) | 2021.07.31 |
---|---|
[BOJ] 1107 리모컨 (0) | 2021.07.21 |
[BOJ] 7573 고기잡이 (0) | 2021.07.14 |
[BOJ] 17255 N으로 만들기 (0) | 2021.06.23 |
[BOJ] 3933 라그랑주의 네 제곱수 정리 (0) | 2021.06.15 |