ProblemSolving/투 포인터

백준 2230 수 고르기 (파이썬)

OSNIM 2022. 5. 9. 12:10
반응형

문제 : 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가지의 경우로 나뉜다고 생각하는데 저의 생각이 곧 정답은 아니니 참고만 해주시면 될 것 같습니다. 

 

반응형