https://www.acmicpc.net/problem/10815
핵심
N과 M이 최대 500,000이다.
단순 탐색으로는 N개의 원소와 M개의 원소를 각각 대응시켜 봐야 하므로 시간복잡도 O(NM)이다. (시간초과)
따라서 시간복잡도를 낮춰야 한다.
이분 탐색을 활용하면 M개의 각 원소에 대해 각각 O(logN)으로 탐색할 수 있다.
전체 시간복잡도는 O(MlogN)으로 줄어든다.
Code (C++)
#include <algorithm>
#include <iostream>
using namespace std;
#define MAX_N 500000
int arr[MAX_N];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N, M, x;
cin >> N;
for (int i = 0; i < N; i++)
cin >> arr[i];
sort(arr, arr + N);
cin >> M;
for (int i = 0; i < M; i++) {
cin >> x;
cout << binary_search(arr, arr + N, x) << '\n';
}
}
Code (Java)
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] arr = new int[N];
for (int i = 0; i < N; i++) {
arr[i] = sc.nextInt();
}
Arrays.sort(arr);
int M = sc.nextInt();
int[] targets = new int[M];
for (int i = 0; i < M; i++) {
targets[i] = sc.nextInt();
}
for (int target : targets) {
int ret = Arrays.binarySearch(arr, target);
if (ret >= 0) {
sb.append(1);
} else {
sb.append(0);
}
sb.append(' ');
}
System.out.println(sb);
}
}
728x90
반응형
'CS > APS' 카테고리의 다른 글
[Baekjoon Online Judge] 1620. 나는야 포켓몬 마스터 이다솜 (0) | 2024.07.05 |
---|---|
[Baekjoon Online Judge] 7785. 회사에 있는 사람 (C++, Java) (0) | 2024.07.04 |
[Baekjoon Online Judge] 1806. 부분합 (C++, Java) (1) | 2024.07.03 |
[Baekjoon Online Judge] 2230. 수 고르기 (C++, Java) (0) | 2024.07.02 |
[Baekjoon Online Judge] 4179. 불 (Java) (0) | 2024.06.28 |