본문으로 바로가기

[이분 탐색] 숫자카드 (boj.kr/10815)

category ps/탐색 2021. 10. 9. 22:45

숫자카드 (boj.kr/10815)

 

풀이코드

#include <iostream>
#include <algorithm>
#include <vector>
#include <deque>
#include <cmath>
using namespace std;
// 10815 숫자 카드

int main(){
	int n, m;
	
	scanf("%d", &n);
	
	vector<int> num(n);
	for(int i = 0; i < n; i++) scanf("%d", &num[i]);
	
	sort(num.begin(), num.begin() + n);
	
	scanf("%d", &m);
	
	for(int i = 0; i < m; i++){
		int x;
		scanf("%d", &x);
		
		int left = 0;
		int right = n - 1;
		bool flag = false;
		
		while(left <= right){
			int mid = (left + right) / 2;
			
			// 기저 사례 : mid 값과 x 가 같으면 찾음
			if(num[mid] == x){
				flag = true;
				break;
			}
			
			else if(num[mid] < x){
				left = mid + 1;
			}
			else{
				right = mid - 1;
			}
		}
		printf("%d ", flag ? 1 : 0);
	}
	printf("\n");
}

 

해설


적용한 레시피 / 방법론 + 접근법

 

풀이

1. 이분 탐색을 바로 적용한다.

아쉬웠던 부분 / 오답 원인 / 개선해야 할 점

1. 입출력 형식의 중요성

- cin / cout 보다 scanf printf 가 속도가 더 빠르다는 것은 자명하다. 이것을 인지하지 못하고 고수준 입출력을 사용한다면, 시간 초과가 나온다. tk 의 크기가 매우 크기 때문에 이런 것 하나하나가 맞고 틀림을 좌지우지 함을 인지하자.

반응형