https://www.acmicpc.net/problem/14921
14921번: 용액 합성하기
홍익대 화학연구소는 다양한 용액을 보유하고 있다. 각 용액은 -100,000,000부터 100,000,000사이의 특성 값을 갖는데, 같은 양의 두 용액을 혼합하면, 그 특성값은 두 용액의 특성값의 합이 된다. 당
www.acmicpc.net
저는 투포인트를 이용해 문제를 해결하였습니다.
저는 입력을 한번 정렬하고 맨 앞과 맨 뒤를 가리키도록 하였습니다.
그리고 합이 0보다 크다면 ei를 줄여 합이 작아도록 하고, 0보다 크다면 si를 늘려 합이 커지도록 하였습니다.
그리고 합을 계속 비교하여 0에 가까운 것을 추적하도록 하였습니다.
package BOJ.twopoint;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
import java.util.function.Function;
public class BOJ_14921 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
Function<String,Integer> stoi = Integer::parseInt;
int n = stoi.apply(st.nextToken());
st = new StringTokenizer(br.readLine());
int[] input = new int[n];
for(int i = 0 ; i < n ; i++){
input[i] = stoi.apply(st.nextToken());
}
Arrays.sort(input);
System.out.println(cal(input,n));
}
private static final int TARGET = 0;
private static final int INF = 987_654_321;
private static int cal(int[] input, int n) {
int si = 0;
int ei = n-1;
int result = INF;
while(si < ei){
int sum = input[si] + input[ei];
if(Math.abs(sum-TARGET) < Math.abs(result-TARGET)){
result = sum;
}
if(sum > TARGET){
ei--;
}else if(sum == TARGET){
return TARGET;
}else{
si++;
}
}
return result;
}
}
'알고리즘' 카테고리의 다른 글
백준 16954번 움직이는 미로 탈출 (JAVA) (0) | 2022.08.11 |
---|---|
백준 1406번 에디터 (JAVA) (0) | 2022.08.10 |
백준 17822번 원판 돌리기 (JAVA) (0) | 2022.08.08 |
벡즌 17090번 미로 탈출하기 (JAVA) (0) | 2022.08.07 |
백준 1713번 후보 추천하기 (JAVA) (0) | 2022.08.06 |