업데이트:

카테고리: , , ,

1. 문제

문제는 링크에 들어가면 있다.

2. 정답 코드

문제의 내 정답 코드는 다음과 같다.

import sys
read = sys.stdin.readline

N = int(read())
array = list(map(int,input().split()))
array.sort()

best_samples = []

start_idx = 0
end_idx = N-1
min_val = 1e9

while start_idx < end_idx :

    start = array[start_idx]
    end = array[end_idx]

    sums = abs(start+end)
    if sums < min_val :
        # 저장하기
        best_samples = [start,end]
        min_val = sums
    if start+end >= 0 : # 양수가 좀 큰거니까 end를 땡기자
        end_idx -= 1
    else : # 음수가 큰거니까 start를 오른쪽으로
        start_idx += 1

    print(start,end,sums,min_val,best_samples)




3. 풀이 및 생각


문제 풀이

이 문제의 핵심은 이진 탐색을 사용해서 값을 천천히 좁혀오는 것이다.


나의 생각

list를 탐색하는 방법은 지금까지 배운바론 대표적으로 일단 2가지가 있는 듯하다. 하나는 슬라이딩 윈도우, 하나는 이진 탐색인데, 슬라이딩 윈도우는 대표적으로 많은 리스트 값들을 연속적으로 데리고 다닌다는 느낌이면 이진 탐색은 어떤 두 값들을 포인팅하는 개념이다. 이를 잘 파악하면 문제에 따라 잘 적용할 수 있을 것 같다.

최대 1 분 소요