백준 2473: 세 용액

uni.gy·2023년 9월 1일
0

알고리즘

목록 보기
20/61

문제

풀이

우선 배열을 오름차순 정렬해준다.
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]);

    }
}

#투포인터

profile
한결같이

0개의 댓글