https://www.acmicpc.net/problem/2470
2470번: 두 용액
첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00
www.acmicpc.net
Problem
- KOI 부설 과학연구소에서는 많은 종류의 산성 용액과 알칼리성 용액을 보유하고 있다. 각 용액에는 그 용액의 특성을 나타내는 하나의 정수가 주어져있다. 산성 용액의 특성값은 1부터 1,000,000,000까지의 양의 정수로 나타내고, 알칼리성 용액의 특성값은 -1부터 -1,000,000,000까지의 음의 정수로 나타낸다.
- 같은 양의 두 용액을 혼합한 용액의 특성값은 혼합에 사용된 각 용액의 특성값의 합으로 정의한다. 이 연구소에서는 같은 양의 두 용액을 혼합하여 특성값이 0에 가장 가까운 용액을 만들려고 한다.
조건
- 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,000,000 이하이다. N개의 용액들의 특성값은 모두 다르고, 산성 용액만으로나 알칼리성 용액만으로 입력이 주어지는 경우도 있을 수 있다.
SOL
용액의 과정에서, 정렬하는 과정만 추가되었다.
파이썬에는 O(NlogN)의 sort함수가 내장되어 있으니까 , 이용하면, 간단하게 풀린다.
# 두 용액
import sys
input= sys.stdin.readline
N=int(input().rstrip())
arr=list(map(int,input().split()))
arr.sort()
left,right=0,N-1
idxL,idxR=0,0
_sum=0
_min=sys.maxsize
while left<right:
_sum= arr[left] + arr[right]
if _min>abs(_sum):
idxL=left
idxR=right
_min=abs(_sum)
if _sum <0 :
left+=1
elif _sum>0:
right-=1
# 0인경우
else:
break
print(arr[idxL],arr[idxR])
'알고리즘 문제(SOL)' 카테고리의 다른 글
[백준/11403/파이썬] 경로 찾기 (0) | 2022.03.16 |
---|---|
[백준/2473/파이썬] 세 용액 (0) | 2022.03.15 |
[백준/2467/파이썬] 용액 (0) | 2022.03.15 |
[백준/17144/파이썬] 미세먼지 안녕! (0) | 2022.03.15 |
[백준/2565/파이썬] 전깃줄 (0) | 2022.03.14 |