백준 2467번 용액 JAVA

YB·2025년 1월 4일

링크텍스트

설명

배열에 양수만 있거나 음수만 있는 경우 적절한 두 값을 바로 출력했다.
배열의 양 끝에서 시작해 두 수의 합의 절대값이 최소가 되는 쌍을 찾기 위해 투 포인터를 사용했다.
합이 양수일 경우 오른쪽 포인터를 왼쪽으로 이동시키고, 음수일 경우 왼쪽 포인터를 오른쪽으로 이동시켰다.

코드

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

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];

        boolean plus = false;
        boolean minus = false;

        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i=0;i<n;i++){
            arr[i] = Integer.parseInt(st.nextToken());

            if(arr[i]>0){
                plus = true;
            }else
                minus = true;
        }

        if(!plus){
            System.out.println(arr[n-2]+" "+arr[n-1]);
            return;
        }else if(!minus){
            System.out.println(arr[0]+" "+arr[1]);
            return;
        }

        int left = 0;
        int right = n-1;
        int answer = Integer.MAX_VALUE;
        int answerLeft =0, answerRight=0;

        while (left<right) {
            int sum = arr[left]+arr[right];

            if(Math.abs(sum)<Math.abs(answer)){
                answer = sum;
                answerLeft = arr[left];
                answerRight = arr[right];
            }
            if(sum>0){
                right--;
            }else
                left++;
        }

        System.out.println(answerLeft+" "+answerRight);
    }
}

참고 글
https://loosie.tistory.com/559

profile
안녕하세요

0개의 댓글