Potato

 

 

  • 용액들을 정렬 한 뒤 투 포인터 알고리즘을 통해 0에 가까운 용액들이 나올 때 마다 a,b에 값을 갱신 한 뒤 마지막에 출력을 해주었다.

 

target = 21e8
N = int(input())
arr = list(sorted(map(int,input().split())))       
start, end = 0, N-1

while end > start:                                  # start가 end보다 작을 떄 까지만 진행
    
    tmp = arr[start] + arr[end]                     # tmp에 두 용액의 합을 저장

    if abs(target) > abs(tmp):                      # 용액의 합이 0에 가깝다면
        target = abs(tmp)                           # target과 a,b를 갱신 시켜줌
        a,b = arr[start],arr[end]                   
        if abs(arr[start]+arr[end-1]) > abs(tmp):   # end 인덱스를 줄였을 때 두 용액의 계산 값이 tmp값 보다 크다면 start 인덱스를 올려줌
            start += 1
        else:
            end -= 1
    else:
        if abs(arr[start]+arr[end-1]) > abs(tmp):
            start += 1
        else:
            end -= 1

print(a,b)

 

 

 

'Python > 백준' 카테고리의 다른 글

[백준/Python] 17086. 아기상어 2  (0) 2022.12.20
[백준/Python] 1806. 부분합  (0) 2022.12.13
[백준/Python] 3273. 두 수의 합  (1) 2022.12.11
[백준/Python] 1976. 여행 가자  (0) 2022.12.10
[백준/Python] 1717. 집합의 표현  (0) 2022.12.10

+ Recent posts