baekjoon

백준 1094번 : 막대기 자바

Meluu_ 2024. 9. 7. 20:43

 

 

🧫 문제 분석

 

✔️ 출처

막대기 실버 5

 

📖 문제

 

 

비트 마스킹 문제인데 바른 방식으로 풀었다. 

시간차는 비트마스킹이랑 4ms 차이정도 났다.

 

비트마스킹 제대로 공부해야겠다.

 

 


🔅 문제 풀이

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

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        PriorityQueue<Integer> pq = new PriorityQueue<>();

        pq.add(64);
        int bar = 0;
        int x = Integer.parseInt(br.readLine());

        while (!pq.isEmpty() && x < 64) {
            int left = pq.poll();
            int right = left / 2; 
            bar += right;

            if (bar == x){
                pq.add(right);
                break;
            }

            if (bar >= x) {
                bar -= right;
                pq.add(right);
            }else {
                pq.add(right);
                pq.add(right);
            }
        }


        bw.write(pq.size() + "");
        bw.flush();
        bw.close();
    }
}

 

 

사실 밑처럼 풀면된다.. 

import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int x = Integer.parseInt(br.readLine());
        int count = Integer.bitCount(x);
        
        bw.write(count+ "");
        bw.flush();
        bw.close();
    }
}

 

 

❗ 오답노트 / 필요한 지식

  1.  비트 마스킹에 대해서 공부할 필요를 느꼈다. 할게 너무많다...