공부하기/백준

[Java] 백준 풀기 1094 - 막대기

XEV 2024. 4. 2. 23:42

자바 백준 1094번

실버 5

https://www.acmicpc.net/problem/1094

 

1094번: 막대기

지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 수학, 비트마스킹

 

 

 

 

 

코드 풀이

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        // X를 입력
        int X = sc.nextInt();
        
        // countBars 함수를 호출하여 막대의 개수 찾음
        int count = countBars(X);
        
        // 필요한 막대의 개수를 출력
        System.out.println(count);
    }
    
    // 막대의 개수를 구하는 메서드
    private static int countBars(int X) {
        // 필요한 막대의 개수를 저장할 변수를 초기화
        int count = 0;
        
        // X가 0보다 클 때까지 반복
        while (X > 0) {
            // X에 가장 가까운 2의 거듭제곱 값을 찾아서 smallestBar에 저장
            int smallestBar = Integer.highestOneBit(X);
            // 찾은 막대를 사용하여 X에서 그 값을 빼고, 필요한 막대의 개수를 증가
            X -= smallestBar;
            count++;
        }
        
        // 필요한 막대의 총 개수를 반환
        return count;
    }
}