백준 10815 : 숫자 카드

혀니앤·2021년 9월 17일
0

C++ 알고리즘

목록 보기
71/118

https://www.acmicpc.net/problem/10815

1. 접근

  • 원하는 숫자가 있는지 탐색해야 하므로, 가장 빠른 탐색인 이중탐색을 사용한다
  • 이중탐색의 결과가 나오지 않는 경우 0을 반환한다
  • 앞선 STL upper_bound 함수를 사용해도 되나, iterator index를 반환하기 때문에 반환값에 v.begin() 값을 빼주어야 해당 인덱스를 구할 수 있다.

2. 나의 풀이

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

vector<int> cards;
int n,m;

void findCard(int FindNum) {
	int right = n-1, left = 0;
	int mid = 0;
	
	while (left <= right) {
		mid = (left + right) / 2;

		if (FindNum > cards[mid]) {
			left = mid+1;
		}
		else if (FindNum < cards[mid]) {
			right = mid-1;
		}
		else if(FindNum==cards[mid]){
			cout << 1 << " ";
			return;
		}
	}
	cout << 0 << " ";
	return;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	cin >> n;
	for (int i = 0; i < n; i++) {
		int Input;
		cin >> Input;
		cards.push_back(Input);
	}

	sort(cards.begin(), cards.end());

	cin >> m;
	for (int i = 0; i < m; i++) {
		int FindInput = 0;
		cin >> FindInput;
		findCard(FindInput);
	}
	
	cout << "\n";
	return 0;
}
profile
일단 시작하기

0개의 댓글