inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

46번 먹방문제) 소스코드좀 봐주세요.

해결된 질문

135

tlswodnr427

작성한 질문수 8

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 이라, 시간초과가 나올리가 없는데 시간초과가 나오네요. 

C++ 코테 준비 같이 해요!

답변 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