https://www.acmicpc.net/problem/1920
1920번: 수 찾기
첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들
www.acmicpc.net
문제
N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오.
입력
첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수의 범위는 -231 보다 크거나 같고 231보다 작다.
출력
M개의 줄에 답을 출력한다. 존재하면 1을, 존재하지 않으면 0을 출력한다.
예전에 단순하게 선형 검색 방법으로 시도했다가 실패하고,
알고리즘 수업 때 배운 이진 탐색을 복습하면서 적용했더니 풀린 문제.
다 풀고 보니까 N 배열을 만들고 따로 정렬하는데 시간이 좀 더 걸린 느낌인데 더 빠른 방법이 없는지 궁금하다.
import java.io.*;
import java.util.*;
public class B_1920 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
String[] data = br.readLine().split(" ");
int M = Integer.parseInt(br.readLine());
String[] data2 = br.readLine().split(" ");
ArrayList<Integer> list = new ArrayList<Integer>(N);
for (String i : data) {
list.add(Integer.parseInt(i));
}
Collections.sort(list);
for (String i : data2) {
bw.write(String.format("%d%n", BynarySearch(list, Integer.parseInt(i))));
}
bw.flush();
bw.close();
}
static int BynarySearch (ArrayList<Integer> a, int key) {
int left = 0;
int right = a.size()-1;
do {
int center = (left+right)/2;
if (a.get(center)==key) {
return 1;
}
else if(a.get(center)<key) {
left = center+1;
}
else {
right = center-1;
}
}
while (left<=right);
return 0;
}
}

728x90
'알고리즘 > BOJ (JAVA)' 카테고리의 다른 글
| (JAVA) 백준 1874번 : 스택 수열 (0) | 2022.02.06 |
|---|---|
| (JAVA) 백준 2609번 : 최대공약수와 최소공배수 (0) | 2022.02.06 |
| (JAVA) 백준 4949번 : 균형잡힌 세상 (0) | 2022.02.04 |
| (JAVA) 백준 11650번 : 좌표 정렬하기 (0) | 2022.02.03 |
| (JAVA) 백준 10814번 : 나이순 정렬 (0) | 2022.02.02 |