https://www.acmicpc.net/problem/2470
2470번: 두 용액
첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00
www.acmicpc.net
해석 및 팁
이 문제는 투포인터를 활용하면 쉽게 풀 수 있습니다. 먼저 배열에 수를 넣은 후 정렬 합니다. 그다음 left를 0, right를 n-1로 정한 다음 두 배열의 합이 최소일 경우 그 값을 저장하고 합이 0보다 작거나 같은 경우에는 l++ 큰 경우에는 r-- 을 해주면 됩니다.
Java 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] arr = new int[n];
int min = Integer.MAX_VALUE;
int l = 0;
int r = n - 1;
int num1 = 0;
int num2 = 0;
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
while(l < r) {
int diff = Math.abs(arr[l] + arr[r]);
if(diff < min) {
min = diff;
num1 = arr[l];
num2 = arr[r];
}
else if(arr[l] + arr[r] > 0) r--;
else if(arr[l] + arr[r] <= 0) l++;
}
System.out.println(num1+" "+num2);
}
}
'백준' 카테고리의 다른 글
백준 1929 소수 구하기(Java) (0) | 2023.01.30 |
---|---|
백준 1463 1로 만들기(Java) (0) | 2023.01.30 |
백준 9507 Generations of Tribbles(Java) (0) | 2023.01.30 |
백준 2491 수열(Java) (1) | 2023.01.30 |
백준 2776 암기왕(Java) (0) | 2023.01.30 |