알고리즘

[백준, 자바, 1094번] 막대기

hminor 2024. 11. 27. 16:27
반응형

풀이

  • 해당 문제는 막대를 가지고 장난치는 문제인데
  • 계속해서 남은 막대 중
  • 짧은 막대를 절반으로 자르는  문제이기에
  • 간단히 우선순위 큐를 사용해서 문제를 풀고자 했음
  • 그리고 계속해서 배열의 모든 값을 더하는 건
  • 비효율 적이라 판단하여 조기 길이인 64에서
  • 조건에 따라 계속해서 차감하는 것으로 현재 길이를 간단히 파악하고자 함
  • 이에 따라 길이가 맞춰졌다면 while문을 탈출하고
  • 현재 배열의 개수를 출력 후 해결

 

import java.util.*;

public class _1094 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int X = sc.nextInt();
        int hap = 64;
        Queue<Integer> li = new PriorityQueue<>(Arrays.asList(64));
        while (hap!=X) {
            int now = li.poll();
            if (hap-now/2>=X) hap-=now/2;
            else li.add(now/2);
            li.add(now/2);
        }
        System.out.println(li.size());
    }
}