umilove98의 블로그

백준 1094 Java 본문

algorithm/백준

백준 1094 Java

umilove98 2021. 7. 23. 13:53
반응형

ArrayList로 문제를 해결하기 위해 64가 담긴 ArrayList를 생성

막대들의 총 합이 X보다 큰지 판별 

리스트의 맨 마지막 원소(가장 작은 길이의 막대)를 가져와서 

자른 막대의 절반 중 하나를 버리고 남아있는 막대의 길이의 합이 X보다 크거나 같다면 막대의 절반만 다시 리스트의 맨 뒤에 집어넣어줌 ex) [64] -> 32 , 32 (x <= 32인경우) -> [32]

아닌 경우 막대의 절반 크기를 두 번 리스트의 맨 뒤에 집어넣어줌 (x > 32인 경우) -> [32, 32]

막대들의 총 합이 X와 같아질 때까지 위의 과정을 반복 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		int x = Integer.parseInt(bf.readLine());
		ArrayList<Integer> stickList = new ArrayList<Integer>();
		stickList.add(64);
		
		while(true) {
			int sum = 0;
			for(int i : stickList) // 막대들의 총 합 
			    sum += i;
			
			if(sum <= x) { // 막대들의 총 합이 x보다 작거나 같으면 종료
				System.out.println(stickList.size());
				return;
			}

			int stick = stickList.get(stickList.size()-1); // 가장 작은 길이의 막대를 절반으로 자르기 위해 리스트에서 가져옴
			stickList.remove(stickList.size()-1); 
			
			if((stick/2 + sum-stick) >= x) {	// 자른 막대의 절반 중 하나를 버리고 남아있는 막대의 길이의 합이 x보다 크거나 같다면 막대의 절반 중 하나를 버린다.
				stickList.add(stick/2);
			}else {
				stickList.add(stick/2);
				stickList.add(stick/2);
			}
				
		}
		
		

	}

}
반응형

'algorithm > 백준' 카테고리의 다른 글

백준 3004 Java  (0) 2021.07.26
백준 1158 Java  (0) 2021.07.23
백준 1059 Java  (0) 2021.07.22
백준 1037 Java  (0) 2021.07.22
백준 1018 Java  (0) 2021.07.22