강의

멘토링

커뮤니티

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

beginagain님의 프로필 이미지
beginagain

작성한 질문수

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

42. 이분검색

벡터 선언할 때 a(n)으로 하면 왜 안되나요??

작성

·

217

0

안녕하세요 강사님. 강의 열심히 수강하고 있습니다.

강의를 보기 전 먼저 풀어봤는데, 변수 이름만 다르고 코드내용은 거의 같은데도 아무것도 출력되지 않고 정상적으로 종료는 됩니다. 

코드를 비교해보니 벡터를 선언할 때  v(n)으로 원소 개수를 정해줘서 그런것 같은데, 왜 이렇게 하면 아무것도 출력이 안되는지 알 수 있을까요..? 

//#42] 이분검색 (Binary Search) 
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main(){
	freopen("input.txt","rt",stdin);
	int n, m, start, mid, end, tmp;
	scanf("%d %d", &n, &m); //n=8, m=32
	vector <int> v(n);
	for(int i=0; i<n; i++){
		//scanf("%d",&v[i]);
        scanf("%d", &tmp);
		v.push_back(tmp);
	}

	sort(v.begin(), v.end());
	start=0;
	end=n-1;
	
	while(start<=end){
		mid=(start+end)/2;

		if(v[mid]>m){
			end=mid-1;
		}else if(v[mid]<m){
			start=mid+1;
		}else if(v[mid]==m){
			printf("%d", mid+1);
			return 0;
		}
	}

	return 0;
}

답변 1

0

김태원님의 프로필 이미지
김태원
지식공유자

v(n)으로 하면 0으로 원소가 n개 채워지고 난 후, push_back으로 집어넣는 숫자는 n개의 0뒤로 들어가서 그렇습니다.

while문 돌기전에 for(int x : v) cout<<x<<" "; 출력해보세요.

beginagain님의 프로필 이미지
beginagain

작성한 질문수

질문하기