반응형
문제 : https://www.acmicpc.net/problem/2230
정답 코드
import sys
def solve():
start = 0
end = 0
answer = 2000000000
while end < N:
subtraction = abs(arr[end] - arr[start])
if subtraction >= M:
if answer >= subtraction:
answer = subtraction
start += 1
if start > end:
start -= 1
end += 1
elif subtraction < M:
end += 1
print(answer)
return
if __name__=="__main__":
input = sys.stdin.readline
N, M = map(int, input().split())
arr = []
for i in range(N):
arr.append(int(input()))
arr.sort()
solve()
정리 및 결과
제가 생각할 때 투 포인터는 크게 2가지로 나뉘는 것 같습니다.
1. 연속된 합을 구하는 문제
2. 두 수의 계산을 묻는 문제
1번의 경우는 정렬 없이 투 포인터의 범위를 구하면 될 것 같습니다.
2번처럼 정렬이 안되어 있는 경우가 존재하니 정렬을 하고 값이 커지면 start를 늘리고 아니면 end를 늘려 1번처럼 구하는 방식입니다.
저는 지금까지 투 포인터를 풀어본 결과 저렇게 2가지의 경우로 나뉜다고 생각하는데 저의 생각이 곧 정답은 아니니 참고만 해주시면 될 것 같습니다.
반응형
'ProblemSolving > 투 포인터' 카테고리의 다른 글
백준 2531 회전 초밥 (파이썬) (0) | 2022.05.09 |
---|---|
백준 1484 다이어트 (파이썬) (0) | 2022.05.09 |
백준 1806 부분합 (파이썬) (0) | 2022.05.08 |
백준 1644 소수들의 연속합 (파이썬) (0) | 2022.05.08 |
백준 2003 수들의 합 (파이썬) (0) | 2022.05.08 |