Python/코딩테스트

[백준] 2330번 : 수 고르기

edoyyoy 2023. 9. 23. 09:54

백준 2330 수 고르기

 

2230번: 수 고르기

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

www.acmicpc.net

 

 

✓ 문제 풀이 : 투포인터 알고리즘 

수가 크기 때문에 반복문을 1번만 사용해야한다.

투포인터 알고리즘으로 탐색하면 빠르게 수를 고를 수 있다.

 

import sys
input = sys.stdin.readline

n, m = map(int, input().split())
a = [int(input()) for _ in range(n)]
a.sort()

s, e = 0, 1
res = float('inf')
while s <= e and e < n:
    tmp = a[e]-a[s]
    
    if tmp < m:
        e += 1
    else:
        res = min(res, tmp)
        s += 1

        if tmp == m:
            break
        
print(res)