728x90
300x250
https://www.acmicpc.net/problem/2295
A+B+C=D 에서 A+B=D-C로 바꾸어서 풀어야 하는 문제. 골드는 골드다.
백준 3273번 두 수의 합 문제에서 응용해서 푸는 문제인데 어렵네요.....
728x90
<Java 성공 코드>
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//System.setIn(new FileInputStream("Test.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int[] arr = new int[N];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
// A+B+C=D .. A+B=D-C로 계산하여 A+B한 값이 D-C 범위에 있는지를 본다.
// A+B하기 O(N^2)
HashSet<Integer> sum = new HashSet<Integer>();
for (int i = 0; i < arr.length; i++) {
for (int j = i; j < arr.length; j++) {
sum.add(arr[i]+arr[j]); //더한값은 동일
}
}
// Iterator it = sum.iterator();
// while(it.hasNext()) {
// System.out.print(it.next()+" ");
// }
// System.out.println();
//D-C에 있는지 확인하기.
int res = -1;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
int k = arr[i]-arr[j];
// System.out.print(k+" ");
if(sum.contains(k)) {
res = Math.max(arr[i], res);
}
}
}
// System.out.println();
System.out.println(res);
}
}
728x90
'알고리즘 > 이분 탐색' 카테고리의 다른 글
백준 1654번: 랜선 자르기 [이분탐색][매개변수탐색]-Java (0) | 2023.09.01 |
---|---|
백준 2805번: 나무 자르기 [이분탐색][매개변수탐색][BinarySearch] -Java (0) | 2023.08.30 |
백준 2470번: 두 용액 [이분 탐색][투 포인터][정렬] -Java (0) | 2023.08.28 |
백준 10816번: 숫자 카드2 [이분 탐색][자료구조] - Java (0) | 2023.08.19 |
백준 1920번: 수 찾기 [이분탐색][정렬] - Java (0) | 2023.08.16 |