[백준 1920번 / JAVA] 수 찾기코딩테스트/백준2023. 6. 21. 10:23
Table of Contents
728x90
728x90
문제 링크
https://www.acmicpc.net/problem/1920
서론
지조있게(?) 프로그래머스 업로드를 기다리다가 드디어 포기하고 백준에 입문하게 되었다.
찾아보니 작년 12월에 풀었던 이력이 있었으며, 그 때는 백준에서의 테스트 포맷이 프로그래머스와 너무 달라 입출력에 난항을 겪어 후퇴했던 기억이 있다.
하지만 leetcode와 hackerrank로 단련된 지금, 백준을 통해 꾸준히 문제를 풀어 나가려고 한다.
풀이
N의 범위가 1~100,000이었기 때문에 이분탐색을 활용하여 풀었다.
잊을만하면 등장하는 것 같다. 아래는 내가 처음 이분탐색을 접했을 때 공부한 내용
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;
class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] Narr = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int i=0; i<N; i++) {
Narr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(Narr);
int M = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine(), " ");
StringBuilder sb = new StringBuilder();
for(int i=0; i<M; i++) {
int mdouble = Integer.parseInt(st.nextToken());
if(binarySearch(mdouble, Narr) >= 0) {
sb.append("1");
}
else sb.append("0");
sb.append("\n");
}
System.out.println(sb);
}
private static int binarySearch(int mdouble, int[] Narr) {
int left = 0;
int right = Narr.length-1;
while(left <= right) {
int mid = (left + right) / 2;
if(mdouble < Narr[mid]) right = mid - 1;
else if(mdouble > Narr[mid]) left = mid + 1;
else return mid;
}
return -1;
}
}
728x90
300x250
@mag1c :: 꾸준히 재밌게
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!