https://www.codetree.ai/missions/8/problems/find-number-fast?&utm_source=clipboard&utm_medium=text
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
이 문제는 배열 내에서 이진탐색을 이용해서 주어진 수를 빠르게 찾아 출력해야합니다.
나는 일반적인 이진탐색 방법으로 문제를 풀었다.
우선, 배열에 주어진 수를 배열에 넣고 정렬했습니다. 그 다음, 현재 탐색하고 있는 부분배열의 왼쪽과 오른쪽을 나타내는 변수를 각각 설정한 다음 이 두 인덱스의 가운데 값을 원하는 값과 비교해서 더 크다면 왼쪽을 나타내는 변수를 mid + 1로 설정하였고, 더 작다면 오른쪽을 나타내는 변수를 mid-1하였다.
import java.io.*;
import java.math.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
//int[] arr= new int[100000];
int[] arr = new int[n];
st = new StringTokenizer(br.readLine());
for(int i = 0;i<n;i++){
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
for(int i = 0;i<m;i++){
int a = Integer.parseInt(br.readLine());
int left = 0;
int right = n-1;
int mid = 0;
while(left <= right){
mid = (left + right) /2;
if(arr[mid] == a) {
sb.append((mid+1) + "\n");
//System.out.println(mid);
break;
}
else{
if(arr[mid] < a){
left = mid + 1;
}
else{
right = mid -1;
}
}
}
if(left > right){
sb.append(-1 + "\n");
}
}
System.out.println(sb);
}
}
'알고리즘 > 코드트리 문제풀이' 카테고리의 다른 글
코드트리 [자바 java] 동전 더하기 (0) | 2023.09.10 |
---|---|
코드트리 [자바 java] 자연수 n개의 합 (0) | 2023.09.10 |
코드트리 [자바 java] 정수 명령 처리 6 (2) | 2023.09.08 |
코드트리 [자바 java] TreeSet 기본 (0) | 2023.09.06 |
코드트리 [자바 java] HashSet 기본 (0) | 2023.09.06 |