
배열에 양수만 있거나 음수만 있는 경우 적절한 두 값을 바로 출력했다.
배열의 양 끝에서 시작해 두 수의 합의 절대값이 최소가 되는 쌍을 찾기 위해 투 포인터를 사용했다.
합이 양수일 경우 오른쪽 포인터를 왼쪽으로 이동시키고, 음수일 경우 왼쪽 포인터를 오른쪽으로 이동시켰다.
import java.util.*;
import java.io.*;
class Main {
public static void main (String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int [] arr = new int[n];
boolean plus = false;
boolean minus = false;
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0;i<n;i++){
arr[i] = Integer.parseInt(st.nextToken());
if(arr[i]>0){
plus = true;
}else
minus = true;
}
if(!plus){
System.out.println(arr[n-2]+" "+arr[n-1]);
return;
}else if(!minus){
System.out.println(arr[0]+" "+arr[1]);
return;
}
int left = 0;
int right = n-1;
int answer = Integer.MAX_VALUE;
int answerLeft =0, answerRight=0;
while (left<right) {
int sum = arr[left]+arr[right];
if(Math.abs(sum)<Math.abs(answer)){
answer = sum;
answerLeft = arr[left];
answerRight = arr[right];
}
if(sum>0){
right--;
}else
left++;
}
System.out.println(answerLeft+" "+answerRight);
}
}
