-
카테고리
-
세부 분야
알고리즘 · 자료구조
-
해결 여부
해결됨
46번 먹방문제) 소스코드좀 봐주세요.
20.01.28 19:14 작성 조회수 71
0
int a[100001];
int main(void)
{
int n,k,i;
scanf("%d",&n);
for(i=1; i<=n; i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&k);
i=1;
int time=0;
while(1)
{
if(a[i]!=-1)
{
a[i]=a[i]-1;
if(a[i]==0)
{
a[i]=-1;
}
time++;
}
if(time==k)
{
i++;
break;
}
i++;
if(i==n+1)
{
i=1;
}
}
while(1)
{
if(i==n+1)
{
i=1;
}
if(a[i]!=-1)
{
printf("%d",i);
break;
}
i++;
}
}
위처럼 했는데 채점해보니 나머지는 괜찮은데 2번이 시간초과가 나와서 80점이 나옵니다.. 어디가 잘못된걸까요?
2번 입력을 보니 3 1 2 3 6 이라, 시간초과가 나올리가 없는데 시간초과가 나오네요.
답변을 작성해보세요.
1
김태원
지식공유자2020.01.28
문제에 출력설명을 보시면 "만약 더 이상 처리할 작업이 없다면 -1를 출력한다." 이 상황을 고려하지 않은 코드입니다.
2번 데이터의 정답은 -1이 출력되는 것입니다.
2번 데이터를 입력하면 위 코드는 마지막 while문이 무한반복합니다.
마지막 while 문에 printf("%d\n", i); 아래와 같이 넣고 확인해 보세요. 무한반복되는 것을 확인할 수 있을 것입니다.
while(1)
{
printf("%d\n", i);
if(i==n+1)
{
i=1;
}
if(a[i]!=-1)
{
printf("%d",i);
break;
}
i++;
}
답변 1