46번 먹방문제) 소스코드좀 봐주세요.
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++;
}
테스트 케이스 질문
0
373
1
병합정렬 시간복잡도 질문
0
462
1
41.연속된 자연수의 합 문제풀이에서 수학적인 원리를 모르고 있습니다.
0
1345
2
질문드립니다.
0
376
1
질문드립니다!
0
430
1
dev 프로그램 질문
0
275
1
문제가 이해가 안되요
0
376
1
4번 나이차이 문제 접근법 질문 드립니다.
0
307
1
source file not compiled
0
1047
3
59번 질문드립니다.
0
372
1
25번 문제 질문
0
349
1
4. 나이차이 문제 질문입니다.
0
372
1
90번 라이언 킹 심바 1번 테스트 케이스
0
470
1
71번 문제 전역 변수 질문 있습니다
0
365
1
75번, 79번 priority_queue관련
1
356
1
75.최대 수입 스케줄
0
400
2
복면산 정답의 수
0
432
1
테스트 케이스에 대해서
0
445
1
수업 내용 질문입니다!
1
232
1
풀어보면 좋은 문제 목록 - 2580 스토쿠 DFS 질문입니다!!
0
822
2
12. 플로이드-와샬(그래프 최단거리) . 27:25초
0
255
1
다른 풀이 방식
0
317
1
크루스칼 vs 프림
0
306
1
숫자 총개수 small 질문있습니다.
0
243
1





