• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

46번 질문입니다.

20.03.17 12:54 작성 조회수 110

0

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int p[2001];
int main(){
	freopen("input.txt","rt",stdin);
 	int n,k,pos=0,bp=0,tot=0;
// 	vector<int> p(n+1);
 	cin>>n;
 	for(int i=1;i<=n;i++) {
 		cin>>p[i];	
 		tot+=p[i];
	}
	if(k>=tot) {
		printf("-1\n");
		return 0;
	}
 	cin>>k;
 	while(1){
 		pos++;
 		if(pos>n) pos=1;
 		if(p[pos]==0) continue;
		p[pos]--;
 		bp++;
 		if(bp==k) break;
	 }
	 while(1){
	 	pos++;
	 	if(pos>n) pos=1;
	 	if(p[pos]!=0) break;
	 }
	 cout<< pos;
	return 0;
}

위 코드에서 주석해놓은 벡터배열로 선언해서 실행하면 타임리밋이고 int 배열로 선언하면 잘 되는데 왜 그런건가요? 처음에 벡터로 풀었는데 당황스러웠어요

답변 2

·

답변을 작성해보세요.

0

감사드립니다... 이런 실수를 했다니 ㅠㅠ 

0

다시 답변드립니다.

cin>>n위치와 cin>>k의 위치가 잘못되어 있습니다. 아래는 수정한 코드입니다.

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//int p[2001];
int main(){
	//freopen("input.txt","rt",stdin);
 	int n,k,pos=0,bp=0,tot=0;
 	cin>>n;
 	vector<int> p(n+1);
 	for(int i=1;i<=n;i++) {
 		cin>>p[i];	
 		tot+=p[i];
	}
	cin>>k;
	if(k>=tot) {
		printf("-1\n");
		return 0;
	}
 	while(1){
 		pos++;
 		if(pos>n) pos=1;
 		if(p[pos]==0) continue;
		p[pos]--;
 		bp++;
 		if(bp==k) break;
	 }
	 while(1){
	 	pos++;
	 	if(pos>n) pos=1;
	 	if(p[pos]!=0) break;
	 }
	 cout<< pos;
	return 0;
}