[백준] 2467번 용액

거북이·2023년 2월 27일
0

백준[골드5]

목록 보기
32/82
post-thumbnail

💡문제접근

  • 처음에는 음수와 양수 리스트를 별도로 만들어 연결 리스트를 이용해서 0에 가까운 값을 갖는 조합을 구하는 방식으로 접근했고 이 과정에서 2중 반복문을 사용했는데 2중 반복문때문에 시간초과(TLE)가 발생한 것 같다.
  • 시간초과가 발생한 다음 아래 알고리즘 분류를 참고했는데 [투 포인터, 이분 탐색]으로 나와 있어서 다시 접근해서 풀었다.
  • Python3에서 int의 최댓값을 구하려면 import sys를 통해서 sys를 import한 다음 maxsize를 입력하면 알 수 있다.

💡코드(메모리 : 42172KB, 시간 : 144ms)

import sys
input = sys.stdin.readline

N = int(input())
solution = list(map(int, input().strip().split()))

p1 = 0
p2 = len(solution) - 1
# sys.maxsize → Python3에서 int의 최댓값
Min = sys.maxsize
while True:
    if p1 >= p2:
        break
    if abs(solution[p1] + solution[p2]) < Min:
        Min = abs(solution[p1] + solution[p2])
        a = solution[p1]
        b = solution[p2]
	
    # 두 용액을 혼합했을때 산성용액일때
    if solution[p1] + solution[p2] > 0:
        p2 -= 1
    # 두 용액을 혼합했을때 알칼리성용액일때
    elif solution[p1] + solution[p2] < 0:
        p1 += 1
    else:
        break
print(a, b)

💡소요시간 : 20m

0개의 댓글