[백준] 1920번: 수 찾기
📝문제
간단하게 수를 찾는 문제. 하지만 무작정 반복문을 사용해서 해결하려고 하면 시간초과가 날 것이다.
어떤 방법이 좋을까 고민하다가 학부 때 배운 이분탐색을 이용하면 되지 않을까? 했다.
근데 막상 이렇게 해결하고나서 다른 분들의 코드를 보니 간단하게 hashset을 사용하는 방법도 있었다.
괜히 정렬하고 재귀로 연산하는 것보다 훨씬 코드가 간결하고 시간도 적게 소요된다.
📌코드
package Baekjoon;
/**
* 정수의 범위 : -2^31 ~ 2^31 -> int
* 탐색 알고리즘
*/
import java.util.*;
import java.io.*;
public class BOJ1920 {
static int n;
static int[] arr;
static void binary(int start, int end, int target){
if(arr[start] == target || arr[end] == target || arr[(start+end)/2] == target){
System.out.println(1);
}
else if(start + 2 < end) {
if(target < arr[(start+end)/2]) binary(start, (start+end)/2 - 1, target);
else binary((start+end)/2 + 1, end, target);
}
else System.out.println(0);
}
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
arr = new int[n];
for(int i = 0; i < n; i++){
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
int m = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
for(int i = 0; i < m; i++){
binary(0, n-1, Integer.parseInt(st.nextToken()));
}
}
}
Author And Source
이 문제에 관하여([백준] 1920번: 수 찾기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@paulus0617/boj1920
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
package Baekjoon;
/**
* 정수의 범위 : -2^31 ~ 2^31 -> int
* 탐색 알고리즘
*/
import java.util.*;
import java.io.*;
public class BOJ1920 {
static int n;
static int[] arr;
static void binary(int start, int end, int target){
if(arr[start] == target || arr[end] == target || arr[(start+end)/2] == target){
System.out.println(1);
}
else if(start + 2 < end) {
if(target < arr[(start+end)/2]) binary(start, (start+end)/2 - 1, target);
else binary((start+end)/2 + 1, end, target);
}
else System.out.println(0);
}
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
arr = new int[n];
for(int i = 0; i < n; i++){
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
int m = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
for(int i = 0; i < m; i++){
binary(0, n-1, Integer.parseInt(st.nextToken()));
}
}
}
Author And Source
이 문제에 관하여([백준] 1920번: 수 찾기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@paulus0617/boj1920저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)