티스토리 뷰
https://www.acmicpc.net/problem/2295
2295번: 세 수의 합
우리가 x번째 수, y번째 수, z번째 수를 더해서 k번째 수를 만들었다라고 하자. 위의 예제에서 2+3+5=10의 경우는 x, y, z, k가 차례로 1, 2, 3, 4가 되며, 최적해의 경우는 2, 3, 4, 5가 된다. k번째 수가 최
www.acmicpc.net
자연수로 이루어진 집합에서 세 수 a, b, c, d를 뽑았을 때, a+b+c=d
를 만족하는 최대 d를 구하는 문제입니다.
모든 경우의 수를 따져서 풀 수 있는데, 이럴 경우 N이 최대 1,000이기 때문에 N^3은 1,000,000,000으로 시간초과가 될 것입니다.
💎 풀이
a+b+c=d
우리가 성립시켜야 할 식입니다.
이 식을 이항해보면 a+b = d-c
를 만들 수 있습니다.
- 모든
a+b
를 Set에 저장할 것입니다. (N^2) a+b
를 저장한 Set에서d-c
가 포함되어 있는지 검사합니다.- 포함된 경우 해당
d
를 Set에 저장합니다. d
가 저장된 Set에서 가장 큰 수를 찾으면 정답입니다. ^^
💎 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
public class BOJ_2295 {
static int N;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
HashSet<Integer> set = new HashSet<>();
for(int i=0; i<N; i++) {
set.add(Integer.parseInt(br.readLine()));
}
HashSet<Integer> abSum = getABSum(set);
HashSet<Integer> dSet = getDSet(set, abSum);
int result = 0;
for(int d : dSet) {
result = Math.max(result, d);
}
System.out.println(result);
}
public static HashSet<Integer> getABSum(HashSet<Integer> set) {
// a+b 모든 경우의 수
HashSet<Integer> ret = new HashSet<>();
for(int a : set) {
for(int b : set) {
ret.add(a + b);
}
}
return ret;
}
public static HashSet<Integer> getDSet(HashSet<Integer> set, HashSet<Integer> abSum) {
// d-c == a+b 인 모든 d를 저장
HashSet<Integer> dSet = new HashSet<>();
for(int d : set) {
for(int c : set) {
if(abSum.contains(d-c)) {
dSet.add(d);
}
}
}
return dSet;
}
}
'알고리즘 > 알고리즘 연습' 카테고리의 다른 글
[프로그래머스] 마법의 엘리베이터 (0) | 2023.04.04 |
---|---|
[BOJ_1991] 트리 순회 (0) | 2023.04.02 |
[BOJ_1021] 회전하는 큐 Java (덱) (0) | 2022.06.02 |
[BOJ_16472] 고냥이 Java (투 포인터) (0) | 2022.05.23 |
[BOJ_9694] 무엇을 아느냐가 아니라 누구를 아느냐가 문제다 Java (다익스트라, 경로 추적) (1) | 2022.05.16 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 트리순회
- 시퀀스가존재하지않습니다
- 빌더패턴
- greedy
- deque
- 분리집합
- BuilderPattern
- effectivejava
- BAEKJOON
- 정적팩터리메서드
- 전위순회
- 투포인터 #알고리즘
- 백준1976
- 탐욕법
- 유니온파인드
- 알고리즘
- 이펙티브자바
- 백준
- 여행가자
- 생성자
- Java
- 프로그래머스
- ORA-02289
- 중위순회
- 후위순회
- Sequence
- 이진트리
- 자바
- 시퀀스
- 스레드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함