백준 2470번: 두 용액 [python]

tomkitcount·2025년 7월 3일

매일 알고리즘

목록 보기
113/302

난이도 : 골드 5
유형 : 투포인터
https://www.acmicpc.net/problem/2470


문제 접근

숫자의 개수 N을 입력받고
N개만큼의 숫자 배열을 입력받는다 이 숫자 배열에서 0에 가장 가까운 숫자는 무엇인지 찾아내 오름차순으로 출력해주면 된다.
(만약 복수정답이라면 아무거나 하나 출력한다.)


해결 아이디어

완전 탐색을 할 경우 O(N^2)으로 N의 범위가 최대 100,000이기에 시간이 너무 오래걸린다.

정렬 + 투포인터 기법을 이용하여 풀면 시간복잡도를 줄이며 0 의 가까운 값을 찾을 수 있다.


해답 및 풀이

import sys
input = sys.stdin.readline

INF = float('inf')

N = int(input())

# 리스트 입력받고 정렬까지
nums = sorted(list(map(int,input().split())))

left = 0 # 첫 숫자
right = N - 1 # 마지막 숫자

abs_sum = INF
answer = (nums[left], nums[right])

while left < right:
    total = nums[left] + nums[right]

    if abs(total) < abs_sum:
        abs_sum = abs(total)
        answer = (nums[left],nums[right])

        if abs_sum == 0:
            break;

    if total < 0:
        left += 1
    
    else:
        right -= 1

print(answer[0], answer[1])
profile
To make it count

0개의 댓글