똥그래미 코딩공장
백준 2230번(수 고르기) 파이썬 본문
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)
코드 자체는 길지않아 이해하는데 어려움은 없을 것 이다.
'Algorithm' 카테고리의 다른 글
| 백준 1504번(특정한 최단 경로) 파이썬 (0) | 2023.02.24 |
|---|---|
| 백준 13549번(숨바꼭질 3) 파이썬 (0) | 2023.02.22 |
| 백준 11052번(카드 구매하기) 파이썬 (0) | 2023.02.19 |
| 백준 6603번(로또) 파이썬 (0) | 2023.02.17 |
| 백준 11403번(경로찾기) 파이썬 (0) | 2023.02.12 |