본문 바로가기

algorithm/Sorting, Binary Search

[C++] BOJ 10815 숫자 카드

문제

www.acmicpc.net/problem/10815

 

10815번: 숫자 카드

첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,

www.acmicpc.net

코드

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

int n, m, card[500005], num;

int search(int num) {
	int lt = 0; int rt = n;
	int mid;
	while (lt <= rt) {
		mid = (lt + rt) / 2;
		if (num == card[mid]) return 1;
		if (num > card[mid]) lt = mid + 1;
		else rt = mid - 1;
	}
	return 0;
}


int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	cin >> n;
	for (int i = 0; i < n; i++)cin >> card[i];
	sort(card, card + n);
	cin >> m;
	while (m--) {
		cin >> num;
		cout<< search(num)<<' ';
	}
}

풀이방법

이중 for문을 이용하면 시간초과가 일어나므로 이분탐색을 이용한다.

고민과정

ios_base::sync_with_stdio(0);랑 cin.tie(0); cout.tie(0);을 빼먹어서 시간초과가 일어났다. 

'algorithm > Sorting, Binary Search' 카테고리의 다른 글

[C++] BOJ 11656 접미사 배열  (0) 2022.01.12
[C++] BOJ 1920 수 찾기  (0) 2021.05.08
[C++] BOJ 11399 ATM  (0) 2021.05.08
[C++] BOJ 16401 과자 나눠주기  (0) 2021.05.08
[C++] BOJ 1931 회의실 배정  (0) 2021.05.07