• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    해결됨

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

답변을 작성해보세요.

1

문제에 출력설명을 보시면 "만약 더 이상 처리할 작업이 없다면 -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++;
		
	}