-
Java 1920 수 찾기PS 2023. 5. 5. 01:17
풀이 :
이분탐색을 하는 메서드를 구현한 뒤 둘째줄에서 입력받은 배열에 네번째 줄에서 받은 배열의 숫자가 있는지 이분 탐색을 이용하여 확인한 뒤 출력하면 풀 수 있는 문제다.
이분 탐색이란, 처음부터 끝까지 비교하며 찾는 선형검색 방법과는 다르게 배열의 시작부터 끝까지의 크기에서 2를 나누어 기준을 잡은 뒤 타겟값과 기준 값을 비교하여 시작과 끝을 좁혀가며 원하는 값을 찾는 방법으로 글로 보는 거보단 그림과 코드로 보는 편이 이해가 더 잘되었다.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; import java.util.Arrays; public class Main{ public static int binarySearch(int[] arr, int target){ int start = 0; int end = arr.length - 1; while(start <= end){ int mid = (start + end)/2; if(target < arr[mid]){ end = mid -1; }else if(target > arr[mid]){ start = mid + 1; }else { return mid; } } return -1; } public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); int n = Integer.parseInt(br.readLine()); int[] arr = new int[n]; StringTokenizer st = new StringTokenizer(br.readLine(), " "); for(int i = 0; i < n; i++){ arr[i] = Integer.parseInt(st.nextToken()); } Arrays.sort(arr); int m = Integer.parseInt(br.readLine()); StringTokenizer stt = new StringTokenizer(br.readLine(), " "); for(int i = 0; i < m; i++){ int target = Integer.parseInt(stt.nextToken()); if(binarySearch(arr, target) >= 0){ sb.append(1 + "\n"); }else { sb.append(0 + "\n"); } } System.out.print(sb); } }
'PS' 카테고리의 다른 글
Java 2941 크로아티아 알파벳 (0) 2023.05.06 Java 1929 소수 구하기 (0) 2023.05.05 Java 17299 오등큰수 (0) 2023.05.04 Java 17298 오큰수 (0) 2023.05.04 Java 10799 쇠막대기 (0) 2023.05.04