틀렸던 부분
더하는 값 저장하는 변수 타입 long 으로 고침
ans[0] = l;
ans[1] = r;
위의 코드를 수정함
ans[0] = arr[l];
ans[1] = arr[r];
이상한 실수를 자주한다;;
import java.io.*;
import java.util.Arrays;
public 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];
String[] input = br.readLine().split(" ");
for(int i = 0; i < N; ++i)
{
arr[i] = Integer.parseInt(input[i]);
}
Arrays.sort(arr);
int l = 0;
int r = N-1;
long sum = arr[l]+arr[r];
int[] ans = new int[2];
ans[0] = arr[l];
ans[1] = arr[r];
long newSum = 0;
while(true)
{
newSum = arr[l]+arr[r];
if(Math.abs(sum) > Math.abs(newSum))
{
sum = newSum;
ans[0] = arr[l];
ans[1] = arr[r];
}
if(0 <= newSum)
{
r--;
}
else //0 > newSum
{
l++;
}
if(l >= r)
break;
}
System.out.print(ans[0] + " " + ans[1]);
}
}
오랜만에 다시 풀었다 투포인터 방식으로 풀었다
import java.io.*;
import java.util.Arrays;
public 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];
String[] input = br.readLine().split(" ");
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(input[i]);
}
Arrays.sort(arr);
int left = 0;
int right = N-1;
int bestvalue = Integer.MAX_VALUE;
int bestleft = 0;
int bestright = 0;
while(left < right){
int sum = arr[left] + arr[right];
if(Math.abs(sum) < bestvalue){
bestvalue = Math.abs(sum);
bestleft = left;
bestright = right;
}
if( sum > 0){
right--;
}else if(sum < 0){
left++;
}else{
bestleft = left;
bestright = right;
break;
}
}
System.out.println(arr[bestleft] + " " + arr[bestright]);
}
}