파게로그
[백준 2470번] 두 용액 본문
문제 링크: 2470번 두 용액
https://www.acmicpc.net/problem/2470
head
와 tail
이 각각 하나의 값들을 가리키고 있을 때, 두 값의 합 cur
이 0에 가까워지고자 한다면, cur < 0
일 때는 head
를 오른쪽으로 옮겨주고, cur > 0
일 때는 cur
을 왼쪽으로 옮겨준다. 계속해서 그 차이 diff
를 확인하면서, 차이가 갱신될 때마다 head
와 tail
이 가리키는 값을 저장해준다.
물론 이러한 매커니즘이 동작하려면 배열이 가장 먼저 정렬되어 있어야 한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
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(new StringTokenizer(br.readLine()).nextToken());
int[] arr = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
Arrays.sort(arr);
int head = 0;
int tail = n-1;
int minDiff = Integer.MAX_VALUE;
int minSol1 = 0;
int minSol2 = 0;
while (head < tail) {
int cur = arr[head] + arr[tail];
int diff = Math.abs(cur);
if (diff < minDiff) {
minDiff = diff;
minSol1 = arr[head];
minSol2 = arr[tail];
}
if (diff == 0)
break;
if (cur < 0) head++;
if (cur > 0) tail--;
}
System.out.printf("%d %d", minSol1, minSol2);
}
}
'콤퓨타 왕왕기초 > PS' 카테고리의 다른 글
[백준 17298번] 오큰수 (0) | 2021.03.30 |
---|---|
[백준 1074번] 재귀로 Z 모양 그리기 (0) | 2021.03.05 |
[백준 10800번] 컬러볼 (0) | 2021.02.25 |
[백준 17825번] 주사위 윷놀이 (0) | 2021.02.18 |
[백준 16235번] 나무 재테크 (0) | 2021.02.18 |
Comments