인프런 커뮤니티 질문&답변
46번 질문입니다.
작성
·
229
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;
}




