<BOJ>1920번: 수 찾기

라모스·2021년 9월 26일
0

BOJ

목록 보기
9/22
post-thumbnail
post-custom-banner

문제


1920번: 수 찾기

접근

  • 특정 수들을 입력 받아 먼저 배열에 저장해둔다.
  • 찾고자 하는 수들을 입력받아 저장해 둔 배열에 있는지를 검사한다.
  • 찾고자 하는 수가 있으면 1, 없으면 0으로 출력한다.
  • 다양한 풀이 법이 있겠지만, 해당 문제에선 이분 탐색으로 푸는게 맞다. (-2^31 ~ 2^31 범위)

내 코드

import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Test {
    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        int[] array = new int[n];
        StringTokenizer st = new StringTokenizer(reader.readLine());
        for (int i = 0; i < n; i++) {
            array[i] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(array);

        int m = Integer.parseInt(br.readLine());
        int[] result = new int[m];

        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < m; i++) {
            int num = Integer.parseInt(st.nextToken());
            int temp = binarySearch(array, num, 0, n-1);
            result[i] = temp != -1 ? 1 : 0;
        }

        for (int i=0; i<m; i++) {
            System.out.println(result[i]);
        }
    }

    public static int binarySearch(int[] array, int target, int start, int end) {
        if (start > end) {
            return -1;
        }
        int mid = (start+end)/2;
        if (array[mid] == target) {
            return mid;
        } else if (array[mid] > target) {
            return binarySearch(array, target, start, mid-1);
        } else {
            return binarySearch(array, target, mid+1, end);
        }
    }
}
  • 이분 탐색을 하는 방법을 안다면 쉽게 풀 수 있는 문제이다.
  • 찾고자 하는 값이 없다면 -1을 반환하도록 binarySearch()를 구현했는데, 이를 기반으로 조건문을 걸어 출력 시 0 또는 1로 출력한다.
profile
Step by step goes a long way.
post-custom-banner

0개의 댓글