[BOJ] 10815번 숫자 카드 - JAVA

최영환·2023년 3월 21일
0

BaekJoon

목록 보기
45/86
post-thumbnail

💡 문제

💬 입출력 예시

📌 풀이(소스코드)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
	static int n, m;
	static int[] arr;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		StringTokenizer st = null;
		n = Integer.parseInt(br.readLine());
		arr = new int[n];
		st= new StringTokenizer(br.readLine());
		for (int i = 0; i < n; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}
		Arrays.sort(arr);

		m = Integer.parseInt(br.readLine());
		st = new StringTokenizer(br.readLine());
		for (int i = 0; i < m; i++) {
			sb.append(binarySearch(Integer.parseInt(st.nextToken()))).append(" ");
		}
		System.out.println(sb.toString());
	}
	
	static int binarySearch(int key) {
		int start = 0;
		int end = arr.length - 1;
		
		while (start <= end) {
			int mid = (end + start) / 2;
			if (arr[mid] < key) {
				start = mid + 1;
			} else if (key < arr[mid]) {
				end = mid - 1;
			} else {
				return 1;
			}
		}
		return 0;
	}
}

📄 해설

  • N 개의 수를 배열에 저장하고, M 개의 수를 입력받아 이진탐색을 수행
  • 배열에 숫자가 존재하면 1을, 아니면 0을 반환하도록 이진탐색을 구현
  • 수행 속도를 빠르게 하기 위해 Scanner 와 출력메소드를 사용하지 않고, BufferedReaderStringBuilder 를 사용하여 해결
  • 메모리와 시간측면에서 매우 큰 차이를 보임
profile
조금 느릴게요~

0개의 댓글