Table of contents
Open Table of contents
Binary Search를 이용한 방법
import sys
from bisect import bisect_left
input = sys.stdin.readline
MAX = 2 * int(1e9) + 1
minAns = MAX
if __name__ == "__main__":
N, M = map(int, input().rstrip().split())
A = [-MAX] + sorted([int(input().rstrip()) for _ in range(N)]) + [MAX]
for i in range(1, len(A) - 1):
idx = bisect_left(A, A[i] + M)
tmpAns = A[idx] - A[i]
if tmpAns >= M and tmpAns < minAns:
minAns = tmpAns
print(minAns)
Two Pointers를 이용한 방법
import sys
from bisect import bisect_left
input = sys.stdin.readline
MAX = 2 * int(1e9) + 1
minAns = MAX
def OOB(j):
if j < 0 or j >= N:
return True
return False
if __name__ == "__main__":
N, M = map(int, input().rstrip().split())
A = sorted([int(input().rstrip()) for _ in range(N)])
e = 0
for s in range(len(A)):
while not OOB(e) and A[e] - A[s] < M:
e += 1
if e == len(A):
break
minAns = min(minAns, A[e] - A[s])
print(minAns)
인덱스 하나 차이로 런타임 오류나 WA를 판정 받을 수 있습니다.
꼼꼼히 OOB 함수등을 이용해서, 인덱스 체크를 해야 합니다.