📝 풀이
- 투 포인터 알고리즘 사용
- 입력받은 배열 오름차순 정렬
- 포인터 left = 0, right = 1로 초기화
- 두 수를 골랐을 때 같은 수일 수 있음
- while left < n and right < n
- 알고리즘 수행
- 만약 두 포인터가 가리키는 인덱스의 값의 차가 m일 경우
- 그대로 출력 후 종료(차이가 m 이상이면서 가장 작은 차이는 m이므로)
- 두 값의 차가 m보다 클 경우
- 현재까지 구한 최소 차이와 비교하여 더 작을 경우 갱신
- 더 작은 차이가 있을 수 있으므로 left 값을 증가시킴
- 두 값의 차가 m보다 작을 경우
- 두 값의 차가 m 이상이 될 수 있도록 right 값을 증가시킴
- 만약 두 포인터가 가리키는 인덱스의 값의 차가 m일 경우
💻 소스 코드
import sys
input = sys.stdin.readline
INF = sys.maxsize
def solve():
left, right = 0, 1
result = INF
while left < n and right < n:
tmp = arr[right] - arr[left]
if tmp == m:
print(tmp)
exit(0)
elif tmp > m:
result = min(result, tmp)
left += 1
else:
right += 1
return result
n, m = map(int, input().split())
arr = []
for _ in range(n):
arr.append(int(input()))
arr.sort()
print(solve())
'🥇 Problem Solving > Two-pointer' 카테고리의 다른 글
[Python] BOJ / 17609번 / 회문 (0) | 2022.06.27 |
---|---|
[Python] BOJ / 2473번 / 세 용액 (0) | 2022.05.22 |
[Python] BOJ / 7453번 / 합이 0인 네 정수 (0) | 2022.04.23 |
[Python] BOJ / 2470번 / 두 용액 (0) | 2022.04.23 |
[Python] BOJ / 1644번 / 소수의 연속합 (0) | 2022.04.09 |