Notice
Recent Posts
Recent Comments
Link
S E P H ' S
[Java] BJ.10815 숫자 카드 본문
10815번: 숫자 카드
첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,
www.acmicpc.net
풀이
이분 탐색 문제이다. 상근이가 갖고 있는 카드의 수들을 담은 배열에 주어진 M개의 정수들로 이분 탐색을 진행하고 있으면 1, 없으면 2를 StringBuilder 에 append하여 출력했다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class BJ_10815 {
static int [] card;
static int [] arr;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
card = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
card[i] = Integer.parseInt(st.nextToken());
}
int M = Integer.parseInt(br.readLine());
arr = new int[M];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < M; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(card);
int start = 0;
int end = card.length - 1;
for (int i = 0; i < M; i++) {
sb.append(search(arr[i], card, start, end)).append(' ');
}
System.out.println(sb);
}
static int search(int n, int [] card, int start, int end){
int mid = (start + end) / 2;
if (start > end){
return 0;
}
if (n == card[mid]){
return 1;
}
else if (n > card[mid]){
return search(n, card, mid + 1, end);
}
else {
return search(n, card, start, mid - 1);
}
}
}
'Algorithm > BackJoon' 카테고리의 다른 글
[Java] BJ.10816 숫자 카드2 (0) | 2022.07.03 |
---|---|
[Python] BJ.10815 숫자카드 (0) | 2022.06.14 |
[Python] BJ.10989 수 정렬하기 3 (0) | 2022.06.13 |
[Java] BJ.10989 수 정렬 3 (0) | 2022.06.13 |
[Python] BJ.2609 최대공약수와 최소공배수 (0) | 2021.12.27 |