반응형
Notice
Recent Posts
Recent Comments
Link
It's easy, if you try
[백준/boj] 1920: 수 찾기 (Java) / 이분 탐색 / 분할 정복 본문
반응형
문제
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
풀이
import java.io.*;
import java.util.*;
public class Main {
static int[] list, nums;
static StringBuilder sb;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
sb = new StringBuilder();
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
list = new int[N];
st = new StringTokenizer(br.readLine());
for(int i=0; i< N; i++) {
list[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(list);
int M = Integer.parseInt(br.readLine());
nums = new int[M];
st = new StringTokenizer(br.readLine());
for(int i=0; i< M; i++) {
nums[i] = Integer.parseInt(st.nextToken());
}
for(int i=0; i<M; i++) {
System.out.println(findNum(nums[i], 0, N-1));
}
}
private static int findNum(int num, int start, int end) {
int answer = 0;
int mid;
while(start <= end) {
mid = (start + end) / 2;
if(list[mid] > num) {
end = mid - 1;
} else if(list[mid] < num) {
start = mid + 1;
} else {
answer = 1;
break;
}
}
return answer;
}
}
먼저 리스트를 오름차순 정렬한 다음
찾아야하는 숫자를 하나씩 이분 탐색으로 살펴보았다.
반응형
'알고리즘 > 자바(Java)' 카테고리의 다른 글
[백준/boj] 5430: AC (Java) / Deque / 자료구조 (1) | 2021.09.25 |
---|---|
[백준/boj] 17089: 세 친구 (Java) / 그래프 (0) | 2021.07.26 |
[백준/boj] 10211: Maximum Subarray (Java) / 분할 정복 / DP (0) | 2021.07.08 |
[프로그래머스] 메뉴 리뉴얼 (Java) / 조합 / 문자열 / HashMap (0) | 2021.07.06 |
[프로그래머스] 이진 변환 반복하기 (Java) / 문자열 / 수학 / Stack (0) | 2021.07.02 |
Comments