반응형
백준 1920번 문제 - 수 찾기
1920번: 수 찾기
첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들
www.acmicpc.net
문제 분석
- N개의 배열 수를 입력 받고, M개의 배열에 있는지 확인하고 싶은 수를 입력 받는다.
- M개의 수가 N개의 배열의 존재하는지 판단 후 존재하면 1을 아니면 0을 출력한다.
해결 키 포인트
- Arrays.sort()로 배열 정렬
- 이진 탐색으로 해당 수가 존재하는지 확인
이진 탐색
데이터가 정렬돼 있는 상태에서 원하는 값을 찾아내는 알고리즘이다.
대상 데이터의 중앙 값과 찾고자 하는 값을 비교해 데이터의 크기를 절반씩 줄이면서 대상을 찾는다.
알고리즘
- 현재 데이터셋의 중앙값을 선택
- 중앙값 > 타깃 데이터 일 때 : 중앙 값 기준으로 왼쪽 데이터 셋 선택
중앙값 < 타깃 데이터 일 때 : 중앙 값 기준으로 오른쪽 데이터 셋 선택 - 과정 1~2를 반복하다, 중앙값 == 타깃 데이터 일 때 : 탐색 종료
코드
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// N 입력
int N = Integer.parseInt(br.readLine());
// N개의 A 입력
int A [] = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0;i<N;i++) {
A[i] = Integer.parseInt(st.nextToken());
}
// A 정렬
Arrays.sort(A);
// M 입력
int M = Integer.parseInt(br.readLine());
// M개의 수 입력
st = new StringTokenizer(br.readLine());
for(int i=0;i<M;i++) {
int num = Integer.parseInt(st.nextToken());
// 이진탐색에 필요한 변수
int pivot = N/2;
int start = 0;
int end = N;
// 해당 변수가 존재하는지 확인하는 변수 (존재 할 경우 1, 아닐 경우 0)
int isContain = 0;
// num이 A 배열에 존재하는지 이진탐색으로 확인
// 시작, 끝의 차이가 1보다 작아질 때까지 반복
while(end - start > 1) {
// 현재 index의 값이 num과 동일할 경우
if(A[pivot] == num) {
isContain = 1;
break;
}
// 현재 index의 값이 num보다 클 경우
else if(A[pivot] > num) {
end = pivot;
}
// 현재 index의 값이 num보다 작을 경우
else {
start = pivot;
}
// 중앙 값 설정
pivot = start + (end-start)/2;
}
// 해당 값이 num인지 확인
if(A[pivot] == num) {
isContain = 1;
}
System.out.println(isContain);
}
}
}
반응형
'CodingTEST' 카테고리의 다른 글
[백준 1300] K번째 수 (JAVA) (0) | 2023.08.12 |
---|---|
[백준 2343] 기타 레슨 (JAVA) (0) | 2023.08.12 |
[백준 1167] 트리의 지름 (JAVA) (0) | 2023.08.11 |
[백준 2178] 미로 탐색 (JAVA) (0) | 2023.08.09 |
[백준 1260] DFS와 BFS (JAVA) (0) | 2023.08.09 |