Algorithm/Baekjoon

๋ฐฑ์ค€ 1654 ๋žœ์„  ์ž๋ฅด๊ธฐ

do-oni 2021. 11. 15. 00:26

๐Ÿ’ปQ

 

1654๋ฒˆ: ๋žœ์„  ์ž๋ฅด๊ธฐ

์ฒซ์งธ ์ค„์—๋Š” ์˜ค์˜์‹์ด ์ด๋ฏธ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋žœ์„ ์˜ ๊ฐœ์ˆ˜ K, ๊ทธ๋ฆฌ๊ณ  ํ•„์š”ํ•œ ๋žœ์„ ์˜ ๊ฐœ์ˆ˜ N์ด ์ž…๋ ฅ๋œ๋‹ค. K๋Š” 1์ด์ƒ 10,000์ดํ•˜์˜ ์ •์ˆ˜์ด๊ณ , N์€ 1์ด์ƒ 1,000,000์ดํ•˜์˜ ์ •์ˆ˜์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•ญ์ƒ K โ‰ฆ N ์ด๋‹ค. ๊ทธ

www.acmicpc.net

 

 

๐Ÿ’กA

์ด๋ถ„ ํƒ์ƒ‰ ํ’€์ด
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		int k = Integer.parseInt(st.nextToken());
		int n = Integer.parseInt(st.nextToken());
		int[] arr = new int[k];
		long max = 0;
		
		for(int i=0; i<k; i++) {
			arr[i] = Integer.parseInt(br.readLine());
			
			if(max < arr[i]) max = arr[i];  //์ตœ๋Œ€ ๋žœ์„  ๊ธธ์ด ์ €์žฅ
		}
		
		max++;  //max +1 ๊ฐ’์ด์–ด์•ผ ํ•จ
		
		long min = 0;
		long mid = 0;  
		
		while(min < max) {
			mid = (max + min) / 2;  //์ค‘๊ฐ„ ๊ธธ์ด ๊ฐ’
			
			long count = 0;  //์ค‘๊ฐ„ ๊ธธ์ด๋กœ ์ž˜๋ผ์„œ ๊ตฌํ•ด์ง€๋Š” ์ด ๋žœ์„  ๊ฐœ์ˆ˜ ์ €์žฅ
			
			for(int i=0; i<arr.length; i++) 
				count += (arr[i] / mid);
			
			//mid ๊ธธ์ด๋กœ ์ž˜๋ž์„ ๋•Œ ๊ฐœ์ˆ˜๊ฐ€ n๊ฐœ ๋ณด๋‹ค ์ž‘์„ ๋•Œ ์ž๋ฅด๋Š” ๊ธธ์ด๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ์ค„์—ฌ์ฃผ๊ณ 
			//๋” ๋งŽ์„ ๋•Œ๋Š” ์ตœ์†Œ ๊ธธ์ด๋ฅผ ๋Š˜๋ ค์ค€๋‹ค.
			if(count < n) max = mid;
			else min = mid + 1;
		}
		
		System.out.println(min - 1);  //-1์„ ํ•ด์ค€ ๊ฐ’์ด ์ตœ๋Œ€ ๊ธธ์ด
	}

}โ€‹