그렇게만 말씀하시면 알 수가 없습니다. 전체 코드를 봐야 합니다. 지금 상태로는 arr의 타입조차 알 수가 없습니다.
1013번 - Contact
두 코드중에 다른부분이 딱 두군데 있습니다. 주석으로 달아놓겠습니다.
<틀린 코드>
#include <stdio.h>
char arr[500];
int st = 1, wrong;
int main(void)
{
int TC;
scanf("%d ", &TC);
for (int tc = 1; tc <= TC; tc++)
{
fgets(&arr[1], sizeof(arr), stdin); // 이부분
wrong = 0;
st = 1;
for (int i = 1;; i++)
{
if (arr[i] == '\n') break; // 이부분
if (st == 1)
{
if (arr[i] == '1' && arr[i + 1] == '0' && arr[i + 2] == '0')
{
st = 2;
i += 2;
continue;
}
else if (arr[i] == '0' && arr[i + 1] == '1')
{
i++;
continue;
}
else
{
wrong = 1;
break;
}
}
if (st == 2)
{
if (arr[i] == '0')
continue;
if (arr[i] == '1')
{
st = 3;
continue;
}
}
if (st == 3)
{
if (arr[i] == '1' && arr[i + 1] == '0' && arr[i + 2] == '0')
{
i++;
st = 2;
continue;
}
else if (arr[i] == '0' && arr[i + 1] == '1')
{
i++;
st = 1;
continue;
}
else if (arr[i] == '1')
continue;
else
{
wrong = 1;
break;
}
}
}
if (wrong == 0 && st != 2)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
<맞은 코드>
#include <stdio.h>
char arr[500];
int st = 1, wrong;
int main(void)
{
int TC;
scanf("%d\n", &TC);
for (int tc = 1; tc <= TC; tc++)
{
scanf(" %s",&arr[1]); //이 부분
wrong = 0;
st = 1;
for (int i = 1;; i++)
{
if (arr[i] == 0) break; //이 부분
if (st == 1)
{
if (arr[i] == '1' && arr[i + 1] == '0' && arr[i + 2] == '0')
{
st = 2;
i += 2;
continue;
}
else if (arr[i] == '0' && arr[i + 1] == '1')
{
i++;
continue;
}
else
{
wrong = 1;
break;
}
}
if (st == 2)
{
if (arr[i] == '0')
continue;
if (arr[i] == '1')
{
st = 3;
continue;
}
}
if (st == 3)
{
if (arr[i] == '1' && arr[i + 1] == '0' && arr[i + 2] == '0')
{
i++;
st = 2;
continue;
}
else if (arr[i] == '0' && arr[i + 1] == '1')
{
i++;
st = 1;
continue;
}
else if (arr[i] == '1')
continue;
else
{
wrong = 1;
break;
}
}
}
if (wrong == 0 && st != 2)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
댓글을 작성하려면 로그인해야 합니다.
hbk388 3년 전
각 테스트케이스를 입력받을때,
scanf(" %s",&arr[1]); 으로 입력을 받으면 정답이 나오는데
fgets(&arr[1], sizeof(arr), stdin); 을 쓰게되면 틀렸습니다가 뜹니다.
왜 그런지 정말 궁금합니다.