공부 기록장
[백준 - Python] 2230. 수 고르기 본문
https://www.acmicpc.net/problem/2230
코드
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
arr = [int(input()) for _ in range(n)]
arr.sort()
end = 1
ans = int(2e9)
for i in range(n):
while arr[end] - arr[i] < m and end < n-1:
end += 1
if arr[end] - arr[i] >= m:
ans = min(ans, arr[end] - arr[i])
print(ans)
'''
n개의 정수 수열
두 수를 골랐을 때(같은 수 가능), 그 차이가 M 이상이면서 제일 작은 경우?
'''
접근 방식
1. 투포인터 사용하기 위해 수열 정렬
2. 시작점은 0, 끝점은 1에서 시작 (같은 수 불가능)
3. 문제에서 제시한 `차이 m 이상` 조건과 인덱스 범위 조건을 만족하는 동안, 끝점 이동시키기
4. `차이 m 이상` 조건 만족시에는 최소값 갱신
배운 점
1. 투포인터 풀이는
(1) 포인터 초기화 후, 무한 루프 내의 조건식으로 포인터 이동 및 반복문 탈출하는 방식과
(2) 포인터 하나는 반복문으로 돌리고, 나머지 포인터는 조건에 따라 이동시키는 방식이 가능하다
2. 최솟값 저장하는 변수를 처음에 큰 수로 초기화 할 때, 문제의 조건에 맞는 최대값으로 설정하는 것이 좋다
'코딩 테스트 > 백준 문제 풀이' 카테고리의 다른 글
[백준 - Python] 2075. N번째 큰 수 (0) | 2024.08.30 |
---|---|
[백준 - Python] 17609. 회문 (0) | 2024.08.09 |
[백준 - Python] 1806. 부분합 (0) | 2024.08.08 |
[백준 - Python] 11728. 배열 합치기 (0) | 2024.08.05 |
[백준 - Python] 2565. 전깃줄 (0) | 2024.04.18 |