본문 바로가기
백준

백준 2473: 세 용액(java)

by unhyepnhj 2024. 10. 11.

문제


풀이

 

2467번 문제와 동일하게 풀이하되, sols[] 배열 전체를 돌며 sols[left] + sols[right] + sols[i](0 < i < N-2, left < right)가 가장 0에 가까워질 때를 찾아야 한다.

 

특성값 범위가 -10억 이상, 10억 이하로 매우 크므로 sols와 sum, min 등을 모두 long 타입으로 선언해야 한다.

 

전체 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

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());
		
		StringTokenizer st=new StringTokenizer(br.readLine());
		int[] sols=new int[N];
		
		for(int i=0; i<N; i++) {
			sols[i]=Integer.parseInt(st.nextToken());
		}

		int min=Integer.MAX_VALUE;
		int leftRes=0, rightRes=0;
		int left=0, right=N-1;
		
		while(left<right) {
			int sum=sols[left]+sols[right];
			
			if(min>Math.abs(sum)) {
				min=Math.abs(sum);
				leftRes=left;	rightRes=right;
			}
			//binary search
			if(sum>=0) {
				right--;
			}
			else {
				left++;
			}
		}
		
		System.out.println(sols[leftRes]+" "+sols[rightRes]);
	}
}

'백준' 카테고리의 다른 글

백준 2343: 기타 레슨(python)  (0) 2024.11.18
백준 17298: 오큰수(java)  (0) 2024.10.13
백준 2467: 용액(java)  (0) 2024.10.11
백준 1806: 부분합(java)  (0) 2024.10.08
백준 1253: 좋다(java/python)  (0) 2024.10.07