백준공부/java

[백준] 9942번 하노이의 네 탑 (gold 2

gomduri43 2023. 11. 8. 20:30

import java.io.*;
import java.util.*;
import java.math.*;
class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        BigInteger[] num=new BigInteger[1001];
        BigInteger[] og=new BigInteger[1001];
        num[1]=new BigInteger("1");
        num[2]=new BigInteger("3");
        num[3]=new BigInteger("5");

        og[1]=new BigInteger("1");
        BigInteger mul=new BigInteger("2");
        BigInteger ad=new BigInteger("1");
        for(int i=2; i<num.length; i++){
            og[i]=new BigInteger(og[i-1].multiply(mul).add(ad).toString());
        }
        BigInteger min;
        BigInteger temp;
        for(int i=4; i<num.length; i++){
            min=new BigInteger(String.valueOf(Long.MAX_VALUE));
            temp=new BigInteger("0");
            for(int j=i/2; j<i; j++){
                temp=num[j].multiply(mul).add(og[i-j]);
                min=temp.compareTo(min)<=0 ? temp:min;
            }
            num[i]=new BigInteger(min.toString());

        }
        long index=1;
        String input;
        while((input=br.readLine())!=null && input.length()!=0){
            int n=Integer.valueOf(input);
            bw.write("Case "+index+": "+num[n]+"\n");
            index++;
        }
        bw.flush();


    }
}