반응형
◎ 문제풀이
아직 투포인터 알고리즘에 대학 숙련도가 낮아 처음에 투포인터를 어디에 위치시켜야 할지를 몰랐다.
위 블로그에 잘 나와있다.
수열의 두 수를 골라 차이가 M 이상인 경우를 고르는 문제이다.
1) 오름차순 정렬한다.
2) 좌측에 두 개의 포인터를 위치하고 하나씩 움직인다.
M 이하면 Pointer1, M이상이면 Pointer2를 이동한다.
◎ 코드
package org.example.twopointer;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
//BOJ2230 수 고르기
public class Tp3 {
public static void main(String[] args) throws IOException {
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[] arr = new int[n];
for(int i=0;i<n;i++){
arr[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(arr);
int pointer1 = 0;
int pointer2 = 0;
int ans = 2000000000;
while(true){
int diff = arr[pointer2] - arr[pointer1];
if(diff == m){
ans = diff;
break;
}
else if(diff>m){
ans = Math.min(ans,diff);
pointer1++;
}
else if(diff<m){
if(pointer2 == n-1) break;
pointer2++;
}
else{ //diff == 0
if(pointer2 == n-1) break;
pointer2++;
}
}
System.out.println(ans);
}
}
반응형
'문제풀이 > TwoPointer' 카테고리의 다른 글
[PS] BOJ2118 두 개의 탑 ( TwoPointer ) with JAVA (0) | 2023.08.31 |
---|---|
[PS] BOJ2470 두 용액 ( Two Pointer ) with JAVA (0) | 2023.07.13 |