[백준] 2470번 두 용액 / Java, Python
Baekjoon Online Judge
algorithm practice
- 단계별 문제풀기
26. 투 포인터
투 포인터 알고리즘과 meet in the middle 알고리즘을 배워 봅시다.
투 포인터 알고리즘과 meet in the middle 알고리즘을 배워 봅시다.
Java / Python
2. 두 용액
A[i] + A[j]가 0에 가까운 경우를 찾는 문제
이번 문제는 산성 용액과 알칼리성 용액의 특성값이 주어졌을 때, 이 중 두 개의 서로 다른 용액을 혼합하여 특성값이 0에 가장 가까운 용액을 만들어내는 두 용액을 찾는 프로그램을 작성하는 문제입니다.
리스트에 용액들의 특성값을 입력하고 리스트를 오름차순으로 정렬한 후 start = 0, end = N - 1로 설정하고 이분탐색을 위해 start < end 일 때까지 while문을 반복합니다.
- 두 용액의 특성값의 합이 음수인 경우
음의 특성값의 절댓값이 양의 특성값의 절댓값보다 크기 때문에 start += 1 을 통해 두 용액 특성값의 합이 0에 가까워지도록 합니다.- 두 용액의 특성값의 합이 양수인 경우
양의 특성값의 절댓값이 음의 특성값의 절댓값보다 크기 때문에 end -= 1를 통해 두 용액 특성값의 합이 0에 가까워지도록 합니다.
- Java
import java.io.*;
import java.util.*;
public class Main {
static int N;
static int[] arr;
static int point1 = -1;
static int point2 = -1;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
N = Integer.parseInt(br.readLine());
arr = new int[N];
st = new StringTokenizer(br.readLine());
for(int i = 0; i < N; i++){
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
solution();
bw.write(point1 + " " + point2 + "\n");
bw.flush();
br.close();
bw.close();
}
static void solution(){
int start = 0;
int end = N - 1;
int max = 2000000000;
while(start < end) {
int sum = arr[start] + arr[end];
// 두 용액 갱신
if(Math.abs(sum) < max) {
point1 = arr[start];
point2 = arr[end];
max = Math.abs(sum);
}
if(sum > 0)
end--;
else
start++;
}
}
}
- Python
import sys
N = int(sys.stdin.readline())
arr = list(map(int, sys.stdin.readline().split()))
arr.sort()
start, end = 0, N - 1
result = 2e+9+1
answer = [] # 정답
while start < end:
p1 = arr[start]
p2 = arr[end]
tmp = p1 + p2
if abs(tmp) < result:
result = abs(tmp)
answer = [p1, p2]
if tmp < 0:
start += 1
else: end -= 1
print(answer[0], answer[1])
Author And Source
이 문제에 관하여([백준] 2470번 두 용액 / Java, Python), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jini_eun/백준-2470번-두-용액-Java-Python저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)