문제
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 |