알고리즘/구현,시뮬
BOJ - 2230 ) 수 고르기
개발자가될수있을까?
2020. 6. 29. 19:08


https://www.acmicpc.net/problem/2230
2230번: 수 고르기
첫째 줄에 두 정수 N, M(0≤M≤2,000,000,000)이 주어진다. 다음 N개의 줄에는 차례로 A[1], A[2], …, A[N]이 주어진다. 각각의 A[i]는 0 ≤ |A[i]| ≤ 1,000,000,000을 만족한다.
www.acmicpc.net
정렬 후, 투포인터를 이용해 원소의 차이를구해준다.
투포인터가 가리키는 차이가 M 을넘은경우 이후의 ii값증가는 볼필요가 없다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class 수고르기 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int num[]= new int[n];
int answer = 2147000000;
for(int i = 0 ; i < n ; i++) {
st= new StringTokenizer(br.readLine());
num[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(num);
int i = 0 , ii = 0;
for( ; ii < n && i < n ; ) {
if(num[ii] - num[i] >= m ) {
answer = answer > num[ii] - num[i] ? num[ii] - num[i] : answer;
i++;
}
else ii++;
}
System.out.println(answer);
}
}
