View

https://www.acmicpc.net/problem/10815

 

10815번: 숫자 카드

첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,

www.acmicpc.net

 

문제 요약

상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀 있는 숫자 카드를 상근이가 가지고 있는지 아닌지를 구하는 프로그램을 작성하시오.

 

문제 해결 아이디어

간단하게 이진 탐색으로 풀었는데 속도가 많이 나왔다. 속도를 줄일 수 있는 아이디어를 얻어야 할듯...

 

완성된 코드

package week3;

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

public class Main_BOJ_10815_숫자카드 {
	static int[] cards;
	
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int N = Integer.parseInt(br.readLine());
		cards = new int[N];

		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		for (int i = 0; i < N; i++) {
			cards[i] = Integer.parseInt(st.nextToken());
		}

		int M = Integer.parseInt(br.readLine());
		Arrays.sort(cards);
		
		int key = 0;
		st = new StringTokenizer(br.readLine(), " ");
		for (int i = 0; i < M; i++) {
			key = Integer.parseInt(st.nextToken());
			search(key);
		}
	}

	public static void search(int key) {
		int start = 0, end = cards.length - 1;

		while (start <= end) {
			int mid = (start + end) / 2;
			if (cards[mid] == key) {
				System.out.print("1 ");
				return;
			} else if (cards[mid] < key) {
				start = mid + 1;
			} else {
				end = mid - 1;
			}
		}
		// 못찾았다면
		System.out.print("0 ");
	}
}
Share Link
reply
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30