1920번: 수 찾기
첫째 줄에 자연수 N(1≤N≤100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1≤M≤100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안��
www.acmicpc.net
[문제 풀이]
이분 탐색을 이용하여 풀었습니다.
이 문제의 경우 정렬이 되어있지 않으면 완전 탐색을 이용해야 합니다. 하지만 완전 탐색을 이용한다면 시간 초과가 날 것이라 생각하였기 때문에 정렬을 해주고 이분 탐색을 이용하여 문제를 풀어주었습니다.
아래 링크를 들어가시면 이분 탐색에 대한 자세한 내용을 정리해 두었습니다.
steady-life.tistory.com/57?category=788590
이분 탐색
이분 탐색 이분 탐색은 탐색 기법의 하나입니다. 탐색 범위를 두 부분으로 분할 하며 탐색한다 하여 이분 탐색이라고 이름 지어졌습니다. 이분 탐색의 핵심은 왼쪽 경계, 오른쪽 경계, 가운데를
steady-life.tistory.com
[코드]
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int N, M;
vector<int> A;
vector<int> B;
int main() {
scanf("%d", &N);
for (int i = 0; i < N; i++) {
int temp;
scanf("%d", &temp);
A.push_back(temp);
}
scanf("%d", &M);
for (int i = 0; i < M; i++) {
int temp;
scanf("%d", &temp);
B.push_back(temp);
}
sort(A.begin(), A.end());
for (int i = 0; i < M; i++) {
bool check = false;
int left = 0;
int right = N - 1;
int target = B[i];
while (left <= right) {
int mid = (left + right) / 2;
if (A[mid] > target) {
right = mid - 1;
}
else if (A[mid] < target) {
left = mid + 1;
}
else if (A[mid] == target) {
check = true;
break;
}
}
if (check)
printf("1\n");
else
printf("0\n");
}
return 0;
}
'algorithm > BOJ' 카테고리의 다른 글
백준 3055_탈출(C++) (0) | 2020.09.28 |
---|---|
백준 1713_후보 추천하기(C++) (0) | 2020.09.24 |
백준 10942_팰린드롬?(C++) (0) | 2020.06.28 |
백준 14889_랜선 자르기(C++) (0) | 2020.06.07 |
백준 5557_1학년(C++) (0) | 2020.06.04 |