![[BOJ 2230] 수 고르기 (Java, 투포인터)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdind24%2FbtsjazD6C0i%2FKDdm5tyxkl0EW9JabrJEwk%2Fimg.png)

[BOJ 2230] 수 고르기 (Java, 투포인터)알고리즘/투 포인터2023. 6. 6. 15:43
Table of Contents
반응형
문제 링크
https://www.acmicpc.net/problem/2230
2230번: 수 고르기
N개의 정수로 이루어진 수열 A[1], A[2], …, A[N]이 있다. 이 수열에서 두 수를 골랐을 때(같은 수일 수도 있다), 그 차이가 M 이상이면서 제일 작은 경우를 구하는 프로그램을 작성하시오. 예를 들어
www.acmicpc.net
풀이
- 시간복잡도 O(NlogN) = 정렬 O(NlogN) 후 투 포인터 O(N) 수행
- Integer 범위 내이긴 하지만, 초기화시 일부 long 선언 처리
- M 만큼의 차이가 날 때까지 R을 먼저 탐색, A[R] - A[L] > M 조건 성립시 결과값 갱신 (최소값)
제출 코드
import java.util.*;
import java.io.*;
public class Main {
static int N;
static long M;
static long[] A;
static void input() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Long.parseLong(st.nextToken());
A = new long[N + 1];
for(int i = 1; i <= N; i++) {
st = new StringTokenizer(br.readLine());
A[i] = Integer.parseInt(st.nextToken());
}
}
static void pro() {
Arrays.sort(A, 1, N + 1); // 오름차순 정렬 필수
int ans = Integer.MAX_VALUE;
for(int L = 1, R = 1; L <= N; L++) {
while(R + 1 <= N && A[R] - A[L] < M) { // 주의*
R += 1;
}
if(A[R] - A[L] >= M) {
ans = Math.min(ans, (int)(A[R] - A[L]));
}
}
System.out.println(ans);
}
public static void main(String[] args) throws Exception {
input();
pro();
}
}
반응형
'알고리즘 > 투 포인터' 카테고리의 다른 글
[BOJ 15565] 귀여운 라이언 (Java, 투 포인터) (0) | 2023.06.06 |
---|---|
[BOJ 2473] 세 용액 (Java, 투 포인터) (1) | 2023.06.06 |
[BOJ 16472] 고냥이 (Java, 투포인터) (0) | 2023.06.06 |
[BOJ 1253] 좋다 (Java, 투포인터) (0) | 2023.06.06 |
[BOJ 13144] List of Unique Numbers (Java, 투포인터) (0) | 2023.06.05 |

@leejinwoo1126 :: 천천히 하나씩
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!