Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

똥그래미 코딩공장

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

Algorithm

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

동그라미_ssu 2023. 2. 21. 19:55

https://www.acmicpc.net/problem/2230

 

2230번: 수 고르기

N개의 정수로 이루어진 수열 A[1], A[2], …, A[N]이 있다. 이 수열에서 두 수를 골랐을 때(같은 수일 수도 있다), 그 차이가 M 이상이면서 제일 작은 경우를 구하는 프로그램을 작성하시오. 예를 들어

www.acmicpc.net

이번 문제는 '투 포인터'라는 알고리즘 개념을 이용해 풀어야 한다.

이분탐색 알고리즘에 있길래 항상 풀던 방식으로 접근해 보았다가 결국 풀지못하고 구글링해서 확인해 보았는데 투 포인터 라는 알고리즘 개념을 이용해 풀고 있었다. 그래서 유투브에 투 포인터 알고리즘을 검색해 강의 좀 들었다.

이번에도 새로운 알고리즘에 대해 배워간다.

import sys
input = sys.stdin.readline

n,m = map(int,input().split())
a = []
for _ in range(n):
    a.append(int(input()))

a.sort()
ans = 10e9

start = 0
end = 0

while start<n and end<n: # 리스트의 길이보다 작아야함
    if (a[end] - a[start]) < m: # m보다 작을경우 end를 늘려 값을 키워준다
        end+=1
    else:
        ans=min(ans,a[end]-a[start]) # m보다 크거나 같을경우 start를 늘려 범위를 다시 좁혀준다
        start+=1

print(ans)

코드 자체는 길지않아 이해하는데 어려움은 없을 것 이다.