두 용액 2470

LJM·2023년 2월 28일
0

백준풀기

목록 보기
121/259

틀렸던 부분
더하는 값 저장하는 변수 타입 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]);
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글