0919_이진탐색 두용액
투포인터 문제 - 백준 두용액
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;
Leave a comment