카테고리 없음
[이분탐색] - gpt 문제 1
have a good time
2025. 3. 24. 10:27
1. K번째 수 찾기
gpt가 알려준 코드
left = 1
right = N*N 으로 해서
이분탐색
public class KthSmallest {
// x 이하의 수가 배열에서 몇 개인지 세는 함수
public static int countLessEqual(int N, int x) {
int count = 0;
for (int i = 1; i <= N; i++) {
count += Math.min(x / i, N); // x 이하의 수는 i행에서 x//i개까지 존재
}
return count;
}
// K번째 작은 수를 찾는 함수
public static int findKthSmallest(int N, int K) {
int low = 1, high = N * N;
while (low < high) {
int mid = (low + high) / 2;
// mid 이하의 수가 K개보다 적으면 low를 증가시킴
if (countLessEqual(N, mid) < K) {
low = mid + 1;
} else {
high = mid;
}
}
return low; // low가 K번째 작은 수
}
public static void main(String[] args) {
// 예시 1
int N = 3;
int K = 5;
System.out.println(findKthSmallest(N, K)); // 출력: 3
// 예시 2
N = 4;
K = 7;
System.out.println(findKthSmallest(N, K)); // 출력: 6
}
}
이 중에서 아래 메서드에 대해 설명하자면
public class KthSmallest {
// x 이하의 수가 배열에서 몇 개인지 세는 함수
public static int countLessEqual(int N, int x) {
int count = 0;
for (int i = 1; i <= N; i++) {
count += Math.min(x / i, N); // x 이하의 수는 i행에서 x//i개까지 존재
}
return count;
}