반응형
문제 : https://www.acmicpc.net/problem/2470
풀이
우선 입력 받은 데이터를 정렬을 한 후 가장 왼쪽과 가장 오른쪽에서부터 데이터를 차례대로 선택해가면서 합이 가장 0에 가까운 값일 때의 두 데이터를 선택할 수 있도록 코드를 작성했습니다.
초기값을 어떻게 세팅할까 고민을 했었는데, 처음에는 INF = sys.maxsize 를 사용하려다가 맨 왼쪽과 맨 오른쪽 값을 초기값으로 세팅해도 문제가 없다고 판단하여 그렇게 세팅을 했습니다.
import sys
read = sys.stdin.readline
n = int(read())
arr = list(map(int, read().split(' ')))
arr.sort()
left = 0
right = n-1
answer = abs(arr[left] + arr[right])
final = [arr[left], arr[right]]
while left < right:
left_val = arr[left]
right_val = arr[right]
sum_data = left_val + right_val
if abs(sum_data) < answer:
answer = abs(sum_data)
final = [left_val, right_val]
if answer == 0:
break
if sum_data < 0:
left += 1
else:
right -= 1
print(final[0], final[1])
반응형
'알고리즘' 카테고리의 다른 글
[99클럽 코테 스터디 3일차 TIL] 이분 탐색 (0) | 2025.01.16 |
---|---|
[99클럽 코테 스터디 2일차 TIL] 이분 탐색 - 백준 1654번 문제 (랜선 자르기) (0) | 2025.01.14 |
[99클럽 코테 스터디 1일차 TIL] 집합과 이분 탐색 (0) | 2025.01.13 |
매크로 함수의 문제점 (0) | 2021.07.19 |