본문 바로가기
알고리즘/백준

[Java] BOJ 2470번 두 용액

by 컴공맨 2021. 7. 5.
 

2470번: 두 용액

첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00

www.acmicpc.net


풀이

정렬을 한 후, 투 포인터를 사용해서 해결했습니다.

이때, 문제에서 0에 제일 가까운 값을 찾기위해 절대값을 사용해서 최소값과 비교를 통해 정답을 갱신시켰습니다.


코드

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 int N;
	public static int[] answer = new int[2];
	public static int[] liquid;
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;
		
		N = Integer.parseInt(br.readLine());
		
		liquid = new int[N];
		
		st = new StringTokenizer(br.readLine(), " ");
		for (int i = 0; i < N; ++i) {
			liquid[i] = Integer.parseInt(st.nextToken());
		}
		
		Arrays.sort(liquid);
		
		int l = 0, r = liquid.length - 1;
		int min = Integer.MAX_VALUE;
		while (l < r) {
			int sum = liquid[l] + liquid[r];
			
			if (Math.abs(sum) < Math.abs(min)) {
				min = sum;
				
				answer[0] = liquid[l];
				answer[1] = liquid[r];
			}
			
			if (sum < 0) {
				l++;
			}
			else if (sum > 0) {
				r--;
			}
			else {
				answer[0] = liquid[l];
				answer[1] = liquid[r];
				break;
			}
		}
		
		System.out.println(answer[0] + " " + answer[1]);
	}
}

 

pyo7410/Algorithm

1일 1커밋을 목표로! Contribute to pyo7410/Algorithm development by creating an account on GitHub.

github.com

 

'알고리즘 > 백준' 카테고리의 다른 글

[Java] BOJ 1038번 감소하는 수  (0) 2021.07.07
[Java] BOJ 14226번 이모티콘  (0) 2021.07.06
[Java] BOJ 12851번 숨바꼭질 2  (0) 2021.07.02
[Java] BOJ 11559번 Puyo Puyo  (0) 2021.07.01
[Java] BOJ 2636번 치즈  (0) 2021.06.30