https://www.acmicpc.net/problem/2230
2230번: 수 고르기
N개의 정수로 이루어진 수열 A[1], A[2], …, A[N]이 있다. 이 수열에서 두 수를 골랐을 때(같은 수일 수도 있다), 그 차이가 M 이상이면서 제일 작은 경우를 구하는 프로그램을 작성하시오. 예를 들어
www.acmicpc.net
import java.util.*;
import java.io.*;
public class Main
{
public static int search(int[] numbers, int m){
int right = 0;
int min_diff = 2_000_000_000;
for(int left=0; left<numbers.length; left++){
int diff = numbers[right]-numbers[left];
while(diff<m && right+1<numbers.length){
right+=1;
diff = numbers[right]-numbers[left];
}
if(diff>=m){
min_diff = Math.min(min_diff, diff);
// System.out.println(left+" "+right+" "+min_diff);
}
}
return min_diff;
}
public static void main(String[] args) throws IOException{
// 입력
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] input1 = br.readLine().split(" ");
int n = Integer.valueOf(input1[0]);
int m = Integer.valueOf(input1[1]);
int[] numbers = new int[n];
for(int i=0; i<n; i++){
numbers[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(numbers);
//답 구하기
int ans = search(numbers, m);
System.out.println(ans);
}
}
import java.util.Arrays;
import java.util.Scanner;
class Main
{
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int M = sc.nextInt();
int[] arr = new int[N];
for (int i = 0; i < N; i++)
arr[i] = sc.nextInt();
Arrays.sort(arr);
int ansDiff = arr[N - 1] - arr[0];
int rightIndex = 0;
for (int leftIndex = 0; leftIndex < N; leftIndex++) {
while (arr[rightIndex] - arr[leftIndex] < M && rightIndex < N - 1)
rightIndex++;
int diff = arr[rightIndex] - arr[leftIndex];
if (diff >= M) ansDiff = Math.min(ansDiff, diff);
}
System.out.println(ansDiff);
}
}
'Problem Solving > 투포인터' 카테고리의 다른 글
BOJ2118 두개의 탑*R (0) | 2024.03.03 |
---|---|
BOJ 12891 DNA 비밀번호 (0) | 2024.03.03 |
BOJ 1806 부분합 (0) | 2024.03.03 |
투포인터 개념 (1) | 2024.03.03 |
카카오2020인턴-보석쇼핑 (0) | 2023.05.02 |