백준 2470번 두 용액 파이썬
문제
입력 , 출력
solution
import sys
input = sys.stdin.readline
def bisearch(start, end):
global s1, s2, res
while start <= end:
if abs(arr[start] + arr[end]) < res:
s1 = arr[start]
s2 = arr[end]
res = abs(arr[start] + arr[end])
if arr[start] + arr[end] < 0:
start += 1
else:
end -= 1
n = int(input())
arr = list(map(int, input().split()))
arr.sort()
res = 2e+9 + 1
s1 = 0
s2 = 0
bisearch(0, n - 1)
print(s1, s2)
설명
키포인트
- 이분탐색 , 투포인터를 사용해서 풀이
- mid값으로 하지 않고 left , right만 사용함
- 두 값을 더했을 경우 0보다 작은경우
마이너스 + 마이너스
마이너스 (절대값이 더 큼) + 플러스
위 두가지 경우가 있다.
이럴 경우에는 배열을 정렬했기때문에
왼쪽 인덱스를 1씩 더해주면 된다.
- 0보다 같거나 큰경우는 오른쪽 포인터에 인덱스를 1씩 더해준다.
- 두가지 포인터를 더했을때 절댓값이 기존에 저장된 정보보다
작을 경우에는 res에 값을 갱신해준다.
Author And Source
이 문제에 관하여(백준 2470번 두 용액 파이썬), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@slbin-park/백준-2470번-두-용액-파이썬
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import sys
input = sys.stdin.readline
def bisearch(start, end):
global s1, s2, res
while start <= end:
if abs(arr[start] + arr[end]) < res:
s1 = arr[start]
s2 = arr[end]
res = abs(arr[start] + arr[end])
if arr[start] + arr[end] < 0:
start += 1
else:
end -= 1
n = int(input())
arr = list(map(int, input().split()))
arr.sort()
res = 2e+9 + 1
s1 = 0
s2 = 0
bisearch(0, n - 1)
print(s1, s2)
키포인트
- 이분탐색 , 투포인터를 사용해서 풀이
- mid값으로 하지 않고 left , right만 사용함
- 두 값을 더했을 경우 0보다 작은경우
마이너스 + 마이너스 마이너스 (절대값이 더 큼) + 플러스 위 두가지 경우가 있다. 이럴 경우에는 배열을 정렬했기때문에 왼쪽 인덱스를 1씩 더해주면 된다.
- 0보다 같거나 큰경우는 오른쪽 포인터에 인덱스를 1씩 더해준다.
- 두가지 포인터를 더했을때 절댓값이 기존에 저장된 정보보다
작을 경우에는 res에 값을 갱신해준다.
Author And Source
이 문제에 관하여(백준 2470번 두 용액 파이썬), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@slbin-park/백준-2470번-두-용액-파이썬저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)