문제
https://www.acmicpc.net/problem/2230
해결
투 포인터를 활용하였다
- 두 수의 차가 목표값 보다 크면 최솟값을 갱신해준 후 start +=1 을 해주어야함
- start += 1을 해주는 이유 : 리스트가 정렬되어있고, 목표값보다 크기 떄문에 start 값을 뺴주어야 하므로..
import sys
n, m = map(int, sys.stdin.readline().split())
lst = []
for i in range(n):
lst.append(int(sys.stdin.readline()))
lst.sort()
start = 0
end = 0
min_value = sys.maxsize
while start < n and end < n: # start, end가 모두 데이터 크기보다 작다면
result = lst[end] - lst[start] # 그 차를 구함
if result >= m: # 차가 목표값보다 더 크다면
min_value = min(lst[end] - lst[start], min_value) # 그 중 가장 작은값을 min_value에 넣음
start += 1 # 그 후 start 포인터 하나 증가
else: # 목표값보다 작다면
end += 1 # end 포인터 하나 증가
print(min_value)
'Algorithm > two pointer' 카테고리의 다른 글
[Python] BOJ 13422 도둑 (0) | 2023.12.06 |
---|---|
[Python] 백준 1806 부분합 (0) | 2023.11.30 |
[BOJ] 2003번 수들의 합2 - 구간합, 투포인터 (0) | 2023.09.22 |
[Python] 백준 1806 부분합 (0) | 2022.06.06 |
댓글