반례↓
틀린 이유
- 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 |