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

[백준/Java] 32952번 비트코인 반감기

by 현장 2026. 1. 15.

-Code

import java.io.*;
import java.util.*;

public class BOJ32952 {
    public static void main(String[] args) throws Exception {
        BufferedReader br =
                new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        long r = Long.parseLong(st.nextToken());
        double k = Double.parseDouble(st.nextToken());
        double m = Double.parseDouble(st.nextToken());

        long count = (long) (m / k);
        // 2의 62승이 넘으면 long의 범위를 넘어가서 0
        if (count > 62) {
            System.out.println(0);
        } else {
            while (count > 0) {
                r /= 2;
                count--;
            }
            System.out.println(r);
        }
    }
}

파이썬으로 이전에 알고리즘을 푼 경험이 있어서 ceil을 통해서 계산하려 했으나 여러 문제가 발생했습니다. long범위를 초과하는 등 문제가 발생하여 하나하나 계산하는 방법이 맞다는 것을 알았습니다. 또한 하나하나 계산하다 보면 시간 초과가 생기는데 이 부분이 2씩 나눠지므로 2의 63승부터는 long의 범위를 초과하는 것을 알게 되어 무조건 0을 반환하게 하면 해결되었습니다.