View
https://www.acmicpc.net/problem/10815
문제 요약
상근이는 숫자 카드 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 ");
}
}
'Level-Up > 알고리즘' 카테고리의 다른 글
[백준] 14888. 연산자 끼워넣기 - 실버1 (0) | 2021.08.25 |
---|---|
[백준] 5639. 이진 검색 트리 - 실버1 (0) | 2021.08.25 |
[백준] 10819. 차이를 최대로 - 실버2 (0) | 2021.08.25 |
[백준] 20055. 컨베이어 벨트 위의 로봇 - 실버1 (0) | 2021.08.18 |
[백준] 14889. 스타트와 링크 - 실버3 (0) | 2021.08.18 |
reply