[파이썬] 백준 2230 : 수 고르기(골드5)
풀이
방향성 생각
- 입력이 10만 이상이라 $O(N^2)$로는 불가능하다.
- 투 포인터로 제한적인 영역을 탐색하면서 $O(N)$으로 풀어주기.
전체코드
import sys
input = lambda : sys.stdin.readline().rstrip()
N,M = map(int,input().split())
arr = [int(input()) for _ in range(N)]
arr.sort()
l,r = 0,0
answer = float('inf')
while l<=r<N:
d = arr[r] - arr[l]
if M <= d:
answer = min(answer,d)
l += 1
else:
r += 1
print(answer)
코멘트
- while 조건에서, l==r까지는 가능하다.
- 같은 숫자에서 조건을 만족시키고, l+=1로 탈출하면 된다.
- 양 쪽에서 포인터를 조이는지, 같은 지점에서 출발하는지는 더 적은 영역을 탐색하는 것을 생각하면 자연스럽게 알 수 있다.
'Algorithm > etc' 카테고리의 다른 글
[파이썬, 자바] 백준 2167 : 2차원 배열의 합 (실버5) (0) | 2025.02.05 |
---|---|
[파이썬] 백준 5800 : 성적 통계 (실버5) (0) | 2025.01.20 |
[파이썬] 백준 1644 : 소수의 연속합 (골드3) (0) | 2024.11.16 |
[파이썬] 백준 3151 : 합이 0 (골드4) (0) | 2024.10.02 |
[파이썬] 백준 2473 : 세 용액 (골드3) (0) | 2024.08.04 |
[파이썬] 백준 1806 : 부분합 (골드4) (0) | 2024.08.02 |
[파이썬] 백준 11660 : 구간 합 구하기 5 (실버1) (0) | 2024.08.02 |
댓글