반응형
문제링크 : 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개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수들의 범위는 int 로 한다.
www.acmicpc.net
내 마음대로 풀이
처음에는 순차탐색을 통해서 답을 구했다.
timeout이 걸릴줄 알았는데, 어째 통과는 했다.
하지만 이 문제 풀이의 핵심은 Binary search를 활용해서 O(logn)시간에 원하는 값을 찾는 것이다.
그래서 아래와 같이
sort함수를 통해 array를 정렬한 후
Recursive Binary search 함수를 작성하여 문제를 해결했다.
import java.util.Scanner;
import java.util.Arrays;
public class Main{
static int [] A ;
public static int bs(int start, int end, int input)
{
int mid = (start + end )/2;
if (mid >= end)
return 0;
if(A[mid] == input)
{
return 1;
}else if (A[mid] < input)
{
return bs(mid+1, end, input);
}else {
return bs(start, mid, input);
}
}
public static void main(String []args){
Scanner sc = new Scanner(System.in);
int input = sc.nextInt();
A = new int [input];
for (int i = 0 ; i < input ; i++)
{
A[i] = sc.nextInt();
}
int input2 = sc.nextInt();
int check ;
boolean exist = false;
Arrays.sort(A);
for (int i = 0 ; i < input2 ; i++)
{
check = sc.nextInt();
System.out.println(bs(0,A.length, check));
}
}
}
반응형
'Backjoon' 카테고리의 다른 글
[백준 2512] 예산 -Java (0) | 2019.09.30 |
---|---|
[백준 1759] 암호만들기 -Java (0) | 2019.09.25 |
[백준 2941] 크로아티아 알파벳 - java 풀이 (0) | 2018.10.28 |
[백준 5622] 다이얼 -java 풀이 (0) | 2018.10.28 |
[백준 2908] 상수 - java 풀이 (0) | 2018.10.28 |