Skip to content

BOJ 백준 2230: 수 고르기

Updated: at 오후 08:12

Table of contents

Open Table of contents

Binary Search를 이용한 방법

import sys
from bisect import bisect_left

input = sys.stdin.readline
MAX = 2 * int(1e9) + 1
minAns = MAX

if __name__ == "__main__":
    N, M = map(int, input().rstrip().split())
    A = [-MAX] + sorted([int(input().rstrip()) for _ in range(N)]) + [MAX]
    for i in range(1, len(A) - 1):
        idx = bisect_left(A, A[i] + M)
        tmpAns = A[idx] - A[i]

        if tmpAns >= M and tmpAns < minAns:
            minAns = tmpAns
    print(minAns)

Two Pointers를 이용한 방법

import sys
from bisect import bisect_left

input = sys.stdin.readline
MAX = 2 * int(1e9) + 1
minAns = MAX


def OOB(j):
    if j < 0 or j >= N:
        return True
    return False


if __name__ == "__main__":
    N, M = map(int, input().rstrip().split())
    A = sorted([int(input().rstrip()) for _ in range(N)])
    e = 0
    for s in range(len(A)):
        while not OOB(e) and A[e] - A[s] < M:
            e += 1
        if e == len(A):
            break
        minAns = min(minAns, A[e] - A[s])

    print(minAns)

인덱스 하나 차이로 런타임 오류나 WA를 판정 받을 수 있습니다.
꼼꼼히 OOB 함수등을 이용해서, 인덱스 체크를 해야 합니다.