본문 바로가기
Beakjoon&프로그래머스/Java

[백준/Java] 9151번 Starship Hakodate-maru

by 현장 2026. 1. 16.

-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문의 사소한 실수로 한번 틀렸고 이를 수정하여 해결했습니다.