백준 2470: 두 용액

uni.gy·2024년 3월 26일
0

알고리즘

목록 보기
55/61

문제

풀이

  1. 숫자 정렬
  2. l=0 r=n-1부터 투포인터 진행
  3. 두 용액 더했을 때 절댓값이 작으면 정답 갱신, 더한 값이 0보다 작으면 l++ 0보다 크면 r--

코드

import java.io.*;
import java.util.*;

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];
        StringTokenizer st=new StringTokenizer(br.readLine());
        for(int i=0;i<n;i++)arr[i]=Integer.parseInt(st.nextToken());
        Arrays.sort(arr);

        int l=0;
        int r=n-1;
        int sum=Math.abs(arr[0]+arr[n-1]);
        int ans1=arr[0];
        int ans2=arr[n-1];
        while(l<r){
            int a=arr[l]+arr[r];
            if(Math.abs(a)<sum){
                sum=Math.abs(a);
                ans1=arr[l];
                ans2=arr[r];
            }
            if(a<0)l++;
            else r--;
        }
        System.out.println(ans1+" "+ans2);
    }
}

#투포인터

profile
한결같이

0개의 댓글