인프런 커뮤니티 질문&답변

Dong Kyun Kang님의 프로필 이미지
Dong Kyun Kang

작성한 질문수

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

46. 멀티 태스킹

46번 질문입니다.

작성

·

167

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;
}
Dong Kyun Kang님의 프로필 이미지
Dong Kyun Kang

작성한 질문수

질문하기