[백준/ 파이썬] 2467 용액

김민구·2022년 4월 6일
0

백준 풀이

목록 보기
2/18

백준 2467번 용액

2467번은 용액 문제이다.
이 문제를 저는 두개의 포인터를 잡아서 풀었습니다. 리스트에서 시작부분을 가리키는 포인터를 start, 끝을 가리키는 포인터를 end라고 잡았습니다.
그리고 우리는 항상 합이 0에 가까운 값을 찾아야합니다.
start + end의 합이 0보다 작을때 0보다 클때를 생각해볼수 있습니다.
합이 0보다 작은경우라면 start를 한칸 앞당겨 합을 키울수 있습니다. 반대로 0보다 큰 경우라면 end를 한칸 줄여서 합의 크기가 줄어들도록 생각할 수 있습니다.
그리고 값을 비교할때는 음수인 경우에 -1을 곱해서 값을 비교해주었습니다. 그래야 -3과 2를 비교할때 2를 선택할수있으니까요.

코드는 다음과 같습니다.

def find_zero(array):
    start = 0
    end = len(array)-1
    min = array[start] + array[end]
    if min < 0:
        min *= -1
    idx_s = start #정답의 인덱스를 기억하는 변수
    idx_e = end			
    while start < end:
        temp = array[end] + array[start]
        if temp < 0:
            if min >= temp*(-1):
                idx_s = start
                idx_e = end
                min = temp*(-1)
            start += 1
        else:
            if min >= temp:
                idx_s = start
                idx_e = end
                min = temp
            end -= 1
    return [idx_s, idx_e]

n = int(input())
array = [int(x) for x in input().split()]
array.sort()
a = find_zero(array)
for el in a:
    print(array[el], end = ' ')
profile
성장하는 개발자가 되고싶어요😀

0개의 댓글