알고리즘/백준
백준 2467 용액 Java [투포인터]
쫑쫑2
2022. 11. 16. 01:50
https://www.acmicpc.net/problem/2467
2467번: 용액
첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 오름차순으로 입력되며, 이 수들은 모두 -
www.acmicpc.net
입력값이 오름차순으로 정렬된 배열이므로,
왼쪽 끝과 오른쪽 끝값을 조건에 따라 하나씩 늘리거나 줄여가면서
0과 가장 가까운 값을 저장하고 출력한다
음수도 나올 수 있으니까 더했을 때 음수면 왼쪽값을 늘리고, 양수면 오른쪽 값을 줄인다
import java.awt.*;
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[] solutions = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
int min = Math.abs(solutions[0] + solutions[N - 1]);
Point point = new Point(solutions[0], solutions[N - 1]);
int l = 0, r = N - 1;
while (l < r) {
int now = solutions[l] + solutions[r];
if (min > Math.abs(now)) {
min = Math.abs(now);
point = new Point(solutions[l], solutions[r]);
}
if (now < 0) l++;
else if (now > 0) r--;
else break;
}
System.out.println(point.x + " " + point.y);
}
}