BaekJoon2470_두 용액

최효준·2022년 12월 5일
0

알고리즘 문제풀이

목록 보기
1/61

두 용액

풀이

  1. 용액을 리스트를 통해 입력 받고 오름차순으로 정렬한다.
  2. l = 0, r = n-1 을 할당해주고 두 포인터 방식으로 while문을 통해 인덱스가 l인 값과 r인 값의 합을 비교, answer 리스트에 l,r 의 초기값 할당
  3. flag에 리스트의 가장 첫 값과 마지막값의 합의 절대값을 할당한다.
    flag = abs(liquid[l] + liquid[r])
  4. while문의 종료조건은 l과 r의 값이 교차되는 순간 종료한다.
  5. liquid[l]과 liquid[r]의 합을 result에 저장하고 flag와 비교한 뒤 result의 절대값이 falg보다 작으면 flag 값 result로 교체
  6. 교체했을 시의 l,r 값을 리스트 answer에 저장
  7. 각 포인터 위치 변경 조건은 liquid[l]과 liquid[r]의 합이 양수면 r -= 1 그 외는 l +=1 로 포인터를 변경
  8. while 문 종료 후 answer 리스트 안의 값들을 인덱스로 갖는 liquid리스트 안의 값이 정답.
# 정답코드
n = int(input())

liquid = list(map(int,input().split()))

liquid.sort()

l, r = 0, n-1
flag = abs(liquid[l] + liquid[r])
answer = [l,r]
while l < r:
    result = liquid[l] + liquid[r]
    if abs(result) < flag:
        flag = abs(result)
        answer = [l,r]
        if flag == 0:
            break
    if result > 0:
        r = r - 1
    else:
        l += 1
                

print(liquid[answer[0]], liquid[answer[1]])
            
profile
Not to be Number One, but to be Only One

0개의 댓글