Koala - 14기/코딩테스트 준비 스터디

[BOJ/C++] 2230 수 고르기

beans3142 2024. 3. 28. 22:25

https://www.acmicpc.net/problem/2230

 

2230번: 수 고르기

N개의 정수로 이루어진 수열 A[1], A[2], …, A[N]이 있다. 이 수열에서 두 수를 골랐을 때(같은 수일 수도 있다), 그 차이가 M 이상이면서 제일 작은 경우를 구하는 프로그램을 작성하시오. 예를 들어

www.acmicpc.net


문제 분석

난이도

골드 5

분류

투포인터

 

문제 풀이

 

전형적인 투 포인터 문제, 투 포인터를 사용하기 위해 정렬해준 뒤 앞 포인터와 뒤 포인터의 차이를 이용해 투 포인터를 진행시키면 되는 문제이다.

소스코드

from sys import stdin
input=stdin.readline

n,m=map(int,input().split())
arr=[int(input()) for i in range(n)]

arr.sort()
f=0
b=0
ans=1e15
while f < n and b<n:
    dif=arr[b]-arr[f]
    if dif<m:
        b+=1
    else:
        ans=min(ans,dif)
        f+=1

print(ans)