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
코드설명
이분탐색을 반복문으로 구현하여 진행했습니다.
이분탐색을 위하여 A[] 배열을 오름차순 정렬한뒤,
M줄의 숫자만큼 이분탐색을 계산합니다.
코드
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Main { public static int N; public static int[] A; public static int M; public static int[] B; public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); A = new int[N]; st = new StringTokenizer(br.readLine()); for(int i=0;i<N;i++) { A[i] = Integer.parseInt(st.nextToken()); } //이분탐색을 위한 A[i] 오름차순 정렬 Arrays.sort(A); st = new StringTokenizer(br.readLine()); M = Integer.parseInt(st.nextToken()); st = new StringTokenizer(br.readLine()); for(int i=0;i<M;i++) { int answer = 0; int startIdx = 0, endIdx = N - 1; int target = Integer.parseInt(st.nextToken()); while(startIdx <= endIdx) { int mid = ( startIdx + endIdx) / 2; if(A[mid] == target) { answer = 1; break; } if(A[mid] < target) startIdx = mid + 1; else if (A[mid] > target) endIdx = mid - 1; } System.out.println(answer); } } }
'알고리즘 > binary_search' 카테고리의 다른 글
[백준] 19637 IF문 좀 대신 써줘 - 이분탐색(binary search) + 시간초과 JAVA (0) | 2023.07.27 |
---|---|
[백준] 2512 예산 - 파라메트릭 서치(Paramatric Search) JAVA (0) | 2023.07.27 |
[백준] 2417 정수 제곱근 - 이분탐색(binary search) JAVA (0) | 2023.07.26 |
[백준] 10815 숫자 카드 - 이분탐색(binary search) JAVA (0) | 2023.07.26 |
[백준] 10816 숫자 카드 2 - 이분탐색(binary search) JAVA (0) | 2023.07.19 |