

-Code
import java.io.*;
import java.util.*;
public class BOJ9151 {
static ArrayList<Integer> container1 = new ArrayList<>();
static ArrayList<Integer> container2 = new ArrayList<>();
static boolean[] isOk = new boolean[151201];
static {
// 연료통1 셋팅
for (int i = 0; i * i * i <= 151200; i++) {
container1.add(i * i * i);
}
// 연료통2 셋팅
int n = 0;
while (true) {
int temp = (n * (n + 1) * (n + 2)) / 6;
if (temp > 151200) break;
container2.add(temp);
n++;
}
// 가능 숫자 셋팅
for (int con1 : container1) {
for (int con2 : container2) {
int sum = con1 + con2;
if (sum <= 151200) {
isOk[sum] = true;
} else {
break;
}
}
}
}
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
while (true) {
int n = Integer.parseInt(br.readLine());
// 탈출 조건
if (n == 0) break;
// 가능한 값이면 출력
for (int i = n; i >= 0; i--) {
if (isOk[i]) {
System.out.println(i);
break;
}
}
}
}
}
문제를 번역해 보니 3 제곱 값과 n * (n + 1) * (n + 2) / 6의 값을 더한 값 중 주어진 값 안에서 가장 큰 값을 구하면 되는 문제였습니다. 그래서 로직을 짜고 했으나 if문의 사소한 실수로 한번 틀렸고 이를 수정하여 해결했습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 9252번 LCS 2 (0) | 2026.01.16 |
|---|---|
| [백준/Java] 9251번 LCS (0) | 2026.01.16 |
| [백준/Java] 2156번 포도주 시식 (0) | 2026.01.16 |
| [백준/Java] 2579번 계단 오르기 (0) | 2026.01.16 |
| [프로그래머스/Java] 베스트앨범 (0) | 2026.01.15 |