백준

[백준_1166번] 선물

빙수빈수 2021. 12. 11. 16:12

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

 

1166번: 선물

민식이는 아이들에게 선물할 같은 크기의 작은 박스를 N개 가지고 있다. 모든 작은 박스는 정육면체이고, 크기는 A × A × A 이다. 민식이는 이 작은 박스를 크기가 L × W × H 인 직육면체 박스에

www.acmicpc.net

[문제]

 민식이는 아이들에게 선물할 같은 크기의 작은 박스를 N개 가지고 있다. 모든 작은 박스는 정육면체이고, 크기는 A × A × A 이다. 민식이는 이 작은 박스를 크기가 L × W × H 인 직육면체 박스에 모두 넣으려고 한다. 모든 작은 박스는 큰 박스 안에 있어야 하고, 작은 박스의 변은 큰 박스의 변과 평행해야 한다.

 N, L, W, H가 주어질 때, 가능한 A의 최댓값을 찾는 프로그램을 작성하시오.

 

[입력 조건]

첫째 줄에 네 정수 N, L, W, H가 주어진다.

 

[코드]

import java.util.*;

public class BaekJoon_1166 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		long n=sc.nextInt();
		long l=sc.nextInt();
		long w=sc.nextInt();
		long h=sc.nextInt();
		
		double start=0;
		double end=Math.max(l,Math.max(w, h));
		
		// 이분탐색
		for(int i=0;i<10000;i++) {
			double mid=(start+end)/2; // 정육면체의 한 변의 길이
			
			// 직육면체에 들어갈 수 있는 정육면체의 개수 구해 n과 비교
			if((long)(l/mid)*(long)(w/mid)*(long)(h/mid)>=n)
				start=mid;
			else
				end=mid;
		}
		System.out.println(start);
	}

}

 

[고찰]

 이번 문제는 이분탐색 문제로 정육면체가 될 수 있는 한 변의 길이를 가정하고, 해당 길이일 경우 직육면체에 들어갈 수 있는 개수를 구해 n과 비교해 변의 길이를 조정해나가는 방식으로 해결할 수 있다. 

 이전 스터디 문제로 선정되었지만 풀지 않고 넘어가 다시 풀어보는 시간을 가졌다. 

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

[백준_1806번] 부분합  (0) 2022.01.04
[백준_16637번] 괄호 추가하기  (0) 2022.01.03
[백준_2470번] 두 용액  (0) 2021.12.10
[백준_4179번] 불!  (0) 2021.12.10
[백준_9935번] 문자열 폭발  (0) 2021.12.02