우선 배열을 오름차순 정렬해준다.
0~n-2까지 투포인터를 통해 최소 특성값을 구해준다.
nums[i] 고정 l=i+1, r=n-1 로 시작
nums[i]+nums[l]+nums[r]이 0보다 작으면 l++
0보다 크면 r--
import java.io.*;
import java.util.*;
public class Main {
static int n;
static long[] nums;
static long[] res;
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
n=Integer.parseInt(br.readLine());
st=new StringTokenizer(br.readLine());
nums=new long[n];
for(int i=0;i<n;i++){
nums[i]=Long.parseLong(st.nextToken());
}
Arrays.sort(nums);
long ans=Long.MAX_VALUE;
res=new long[3];
for(int i=0;i<n-2;i++){
int l=i+1,r=n-1;
while(l<r){
if(l>n-1)break;
if(r<i+1)break;
long sum=nums[i]+nums[l]+nums[r];
if(ans>Math.abs(sum)){
ans=Math.abs(sum);
res[0]=nums[i];
res[1]=nums[l];
res[2]=nums[r];
}
if(sum<=0)l++;
else r--;
}
}
System.out.println(res[0]+" "+res[1]+" "+res[2]);
}
}
#투포인터