-
[백준 1920] 수찾기 - 이분탐색코딩테스트 문제풀이 2021. 10. 7. 22:42
문제
풀이
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int[] src = new int[n]; for (int i = 0; i < n; i++) { src[i] = scanner.nextInt(); } int m = scanner.nextInt(); int[] target = new int[m]; for (int i = 0; i < m; i++) { target[i] = scanner.nextInt(); } scanner.close(); Arrays.sort(src); outer: for (int i = 0; i < m; i++) { int min = 0; int max = n - 1; int t = target[i]; while (min <= max) { int mid = (min + max) / 2; if (src[mid] == t) { System.out.println(1); continue outer; } else if (src[mid] > t) { max = mid - 1; } else { min = mid + 1; } } System.out.println(0); } } }
- src array를 정렬한다.
- idx의 min, max를 0, 배열 마지막 idx로 설정한 후, mid값을 min ~ max의 중간값으로 설정한다.
- min > max보다 커지는 시점까지 반복한다.
- 찾으려는 대상 t가 src[mid]보다 크면 min을 중간값 + 1로 설정, 작으면 max를 중간값 - 1로 설정함으로써 반씩 범위를 줄여나간다.
'코딩테스트 문제풀이' 카테고리의 다른 글
[프로그래머스] 다단계 칫솔 판매 (0) 2021.10.12 [백준 1931] 회의실 배정 - 그리디 알고리즘 (0) 2021.10.12 [프로그래머스] 야근지수 (0) 2021.10.06 [백준 2798] 블랙잭 (0) 2021.10.06 [프로그래머스] 베스트앨범 - 해시 (0) 2021.10.02