1 minute read

투포인터 문제 - 백준 두용액

https://www.acmicpc.net/problem/2470

두용액을 섞어서 가장 0에 가까운 혼합 용액을 만드는 문제이다. 그리고 투포인터를 사용해서 문제를 풀어야 한다.

import sys
import math
input = sys.stdin.readline;
N = int(input())
potions = list(map(int, input().split()))

potions.sort();

result = []
minNum = sys.maxsize;
start, end = 0, N-1;

while(start < end): //종료조건
  //가장 작은값이 아니라 가장 0 가까운 값을 구해야하기때문에 절대값으로 계산해야 한다.
  if( abs(potions[start] + potions[end]) < abs(minNum)):
    minNum = potions[start]+ potions[end];
    result = [potions[start], potions[end]]
  if(minNum == 0):
    break;
  if(minNum < 0):
    start +=1;
  else:
    end -=1;


print(result[0], result[1])

배열 정렬 후 start, end라는 두 포인터를 선언한뒤

절대값(!!!)을 비교해서 0 보다 작으면 start+1 을 해서 0에 가깝도록 하 반대로 0보다 크면 end -1을 하면서 절대값의 최솟값을 구한다.

최소값 변수 초기화
import sys
INF = sys.maxsize;

Updated:

Leave a comment