Notice
Recent Posts
Link
- Today
- Total
hye-log
[백준]1920번 수 찾기(JAVA) 본문
0. 문제 링크
https://www.acmicpc.net/problem/1920
1920번: 수 찾기
첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들
www.acmicpc.net
1. 문제 설명
1) M개의 정수 배열의 수가 N개의 정수 배열 A에 존재하는지 출력
2. 입출력
// input
5 // N
4 1 5 2 3 // A[1], A[2], ... , A[N]
5 // M
1 3 7 9 5
3. 코드
import java.util.*;
public class b1920 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
int N = sc.nextInt(); // N개의 정수
int[] arr = new int[N];
for (int i = 0; i < N; i++) {
arr[i] = sc.nextInt();
}
Arrays.sort(arr); // 정렬
int M = sc.nextInt(); // M개의 정수
for (int i = 0; i < M; i++) {
if(binarySearch(arr, sc.nextInt()) >= 0){ // arr에 존재하는지
sb.append(1).append("\n"); // 존재하면 1 추가
} else {
sb.append(0).append("\n"); // 존재하지 않으면 0 추가
}
}
System.out.println(sb);
}
private static int binarySearch(int[] arr, int key) {
int start = 0; // 시작 위치
int end = arr.length - 1; // 종료 위치
while(start <= end) { // 시작 위치보다 종료 위치가 작거나 같을 때까지 반복
int mid = (start + end) / 2; // 중간 지점
if(key < arr[mid]){ // key 값이 중간 지점보다 작으면
end = mid - 1; // 종료 위치 조정
} else if(key > arr[mid]) { // key 값이 중간 지점보다 크면
start = mid + 1; // 시작 위치 조정
} else { // key 값과 중간 지점 값과 같으면
return mid; // mid가 찾는 값임
}
}
return -1;
}
}
실행 결과
4. 회고
1) N개의 정수 배열이 최대 100,000개까지 주어질 수 있기 때문에 일일히 비교하는 것은 시간 초과
2) binarySearch로 이진 탐색을 통해서 반씩 나누어서 살펴보면서 찾으려는 숫자가 존재하는지 파악
5. Github
728x90
'CodingTest > Baekjoon' 카테고리의 다른 글
[백준]14940번 쉬운 최단거리(JAVA) (0) | 2023.08.18 |
---|---|
[백준]1978번 소수 찾기(JAVA) (0) | 2023.08.18 |
[백준]1676번 팩토리얼 0의 개수(JAVA) (0) | 2023.08.18 |
[백준]1018번 체스판 칠하기(JAVA) (0) | 2023.08.18 |
[백준]10989번 수 정렬하기 3(JAVA) (0) | 2023.08.18 |
Comments