본문 바로가기

# 소쿠리 개발 공부방/코테 문제풀이

[BAEKJOON] [2230] 수고르기: PYTHON

[2230] 수고르기

 

2230번: 수 고르기

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

www.acmicpc.net

Input

  • 첫째 줄에 두 정수 N, M
  • 둘째 줄에 다음 N개의 줄에는 차례로 A[1], A[2], …, A[N]
  • 제한
    1 ≤ N ≤ 100,000
    0 ≤ M ≤ 2,000,000,000
    0 ≤ |A[i]| ≤ 1,000,000,000

Output

  • 첫째 줄에 M 이상이면서 가장 작은 차이를 출력

 

✨ Solve

  • 투포인터
  • 수열 오름차순 정렬
  • answer 초기값 nt(2e9)
  • 두 수의 차이가 M 이상이면서 제일 작은 수를 비교한 뒤, 업데이트

 

💻 Code

### 언어 python3, 메모리 35500KB, 시간 184ms

import sys

n, m = map(int, sys.stdin.readline().split())
numbers=[]
for i in range(n):
    number = int(sys.stdin.readline())
    numbers.append(number)
numbers.sort()

left, right = 0, 0
answer = int(2e9) # M 이상이므로 (0 ≤ M ≤ 2,000,000,000)

while left <=right and right < n:
    if numbers[right]-numbers[left] < m:
        right +=1

    else:
        answer = min(answer, numbers[right]-numbers[left])
        left +=1

print(answer)