📝 문제
백준 - 1094번 막대기
📝 답안
📌 작성 코드
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));
//만들어야 할 길이
int X = Integer.parseInt(br.readLine());
//첫 막대기 길이
int stick = 64;
//남아있는 막대기 길이
ArrayList<Integer> all = new ArrayList<>();
//all 안에 들어있는 막대기 모든 길이
int allStick = 0;
//while문으로 막대 길이와 남아있는 막대 길이가 X보다 작거나 같아질 때까지 반복
while (stick + allStick > X) {
//막대기를 절반으로 자르고
stick /= 2;
//절반으로 잘린 막대 길이와 남아있는 막대기 모든 길이의 합이 X보다 작으면
if (stick + allStick < X) {
//다른 절반으로 잘린 막대기는 보관
all.add(stick);
allStick += stick;
}
}
//stick은 따로 추가해줘야하기 때문에 +1을 해줌
System.out.println(all.size()+1);
}
}
📌 결과