[ BOJ 2467 ] 용액(Python)

uoayop·2021년 6월 1일
0

알고리즘 문제

목록 보기
84/103
post-thumbnail

문제

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

꼭 알칼리성-산성 용액만 섞어야 되는 게 아니였다 ㅎ
그냥 아무 두 용액을 섞었을 때 가장 0에 가까운 애들을 출력해주면 된다.
(⛏삽질 오지게 했다.)

[BOJ 2470] 두 용액 문제와 거의 동일하다!
2467 문제는 배열이 정렬되어 있고, 2470 문제는 배열이 정렬되어 있지 않다는 점만 다르다.


문제 풀이

0. 입력 받기

n = int(input())
liquids = list(map(int, input().rsplit()))

1. 두 포인터를 이동시키면서 값 체크하기

  • 절댓값(두 용액을 더한 값) 중 가장 작은 값을 answer 에 저장해준다.
  • 만약 두 용액을 더한 값이 0보다 작으면 l 값을 증가시킨다.
  • 두 용액을 더한 값이 0과 같거나 크면 r 값을 감소시킨다.
l, r, curr, answer = 0, n-1, 0, sys.maxsize
ansl, ansr = 0, 0

while l < r:
    if abs(liquids[l] + liquids[r]) < answer:
        answer = abs(liquids[l] + liquids[r])
        ansl, ansr = liquids[l], liquids[r]
    
    if liquids[l] + liquids[r] < 0:
        l += 1
    else:
        r -= 1

코드

import sys
input = sys.stdin.readline

n = int(input())
liquids = list(map(int, input().rsplit()))

l, r, curr, answer = 0, n-1, 0, sys.maxsize
ansl, ansr = 0, 0

while l < r:
    if abs(liquids[l] + liquids[r]) < answer:
        answer = abs(liquids[l] + liquids[r])
        ansl, ansr = liquids[l], liquids[r]
    
    if liquids[l] + liquids[r] < 0:
        l += 1
    else:
        r -= 1

print(ansl, ansr)
profile
slow and steady wins the race 🐢

0개의 댓글