2467번: 용액

첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 오름차순으로 입력되며, 이 수들은 모두 -

www.acmicpc.net


투포인터를 사용하자!

 

  1. left = 0, right = N-1로 지정한다.
  2. 성질합 최소값(_min)을 sys.maxsize로 설정한다.
  3. 두 용액의 성질합이 _min보다 작다면 answerLanswerR에 각각 인덱스를 저장하고 _min을 update한다. 
  4. 두 용액의 성질합이 0보다 작으면 left값을 하나 늘여주고, 크다면 right값을 하나 줄여준다.
  5. leftright가 같아질때 종료된다.

 

import sys
input = sys.stdin.readline

N = int(input())
arr = list(map(int, input().split()))

left = 0
right = N-1
answerL = 0
answerR = 0
_min = sys.maxsize
while left < right:
    _sum = arr[left] + arr[right]

    if abs(_sum) < _min:
        answerL = left
        answerR = right
        _min = abs(_sum)

    if _sum > 0:
        right -= 1
    elif _sum < 0:
        left += 1
    else:
        break

print(arr[answerL], arr[answerR])

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기