๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[๋ฐฑ์ค€ ์Šคํ„ฐ๋”” 1์ฃผ์ฐจ] 2805๋ฒˆ ๋‚˜๋ฌด ์ž๋ฅด๊ธฐ ์‹ค๋ฒ„3 - ์ž๋ฐ”(JAVA)/ ์ด๋ถ„ํƒ์ƒ‰

๐Ÿ“‘ ๋ฌธ์ œ

 

๋”๋ณด๊ธฐ

๋ฌธ์ œ

์ƒ๊ทผ์ด๋Š” ๋‚˜๋ฌด M๋ฏธํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๊ทผ์ฒ˜์— ๋‚˜๋ฌด๋ฅผ ๊ตฌ์ž…ํ•  ๊ณณ์ด ๋ชจ๋‘ ๋งํ•ด๋ฒ„๋ ธ๊ธฐ ๋•Œ๋ฌธ์—, ์ •๋ถ€์— ๋ฒŒ๋ชฉ ํ—ˆ๊ฐ€๋ฅผ ์š”์ฒญํ–ˆ๋‹ค. ์ •๋ถ€๋Š” ์ƒ๊ทผ์ด๋„ค ์ง‘ ๊ทผ์ฒ˜์˜ ๋‚˜๋ฌด ํ•œ ์ค„์— ๋Œ€ํ•œ ๋ฒŒ๋ชฉ ํ—ˆ๊ฐ€๋ฅผ ๋‚ด์ฃผ์—ˆ๊ณ , ์ƒ๊ทผ์ด๋Š” ์ƒˆ๋กœ ๊ตฌ์ž…ํ•œ ๋ชฉ์žฌ์ ˆ๋‹จ๊ธฐ๋ฅผ ์ด์šฉํ•ด์„œ ๋‚˜๋ฌด๋ฅผ ๊ตฌํ• ๊ฒƒ์ด๋‹ค.

๋ชฉ์žฌ์ ˆ๋‹จ๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค. ๋จผ์ €, ์ƒ๊ทผ์ด๋Š” ์ ˆ๋‹จ๊ธฐ์— ๋†’์ด H๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค. ๋†’์ด๋ฅผ ์ง€์ •ํ•˜๋ฉด ํ†ฑ๋‚ ์ด ๋•…์œผ๋กœ๋ถ€ํ„ฐ H๋ฏธํ„ฐ ์œ„๋กœ ์˜ฌ๋ผ๊ฐ„๋‹ค. ๊ทธ ๋‹ค์Œ, ํ•œ ์ค„์— ์—ฐ์†ํ•ด์žˆ๋Š” ๋‚˜๋ฌด๋ฅผ ๋ชจ๋‘ ์ ˆ๋‹จํ•ด๋ฒ„๋ฆฐ๋‹ค. ๋”ฐ๋ผ์„œ, ๋†’์ด๊ฐ€ H๋ณด๋‹ค ํฐ ๋‚˜๋ฌด๋Š” H ์œ„์˜ ๋ถ€๋ถ„์ด ์ž˜๋ฆด ๊ฒƒ์ด๊ณ , ๋‚ฎ์€ ๋‚˜๋ฌด๋Š” ์ž˜๋ฆฌ์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•œ ์ค„์— ์—ฐ์†ํ•ด์žˆ๋Š” ๋‚˜๋ฌด์˜ ๋†’์ด๊ฐ€ 20, 15, 10, 17์ด๋ผ๊ณ  ํ•˜์ž. ์ƒ๊ทผ์ด๊ฐ€ ๋†’์ด๋ฅผ 15๋กœ ์ง€์ •ํ–ˆ๋‹ค๋ฉด, ๋‚˜๋ฌด๋ฅผ ์ž๋ฅธ ๋’ค์˜ ๋†’์ด๋Š” 15, 15, 10, 15๊ฐ€ ๋  ๊ฒƒ์ด๊ณ , ์ƒ๊ทผ์ด๋Š” ๊ธธ์ด๊ฐ€ 5์ธ ๋‚˜๋ฌด์™€ 2์ธ ๋‚˜๋ฌด๋ฅผ ๋“ค๊ณ  ์ง‘์— ๊ฐˆ ๊ฒƒ์ด๋‹ค. (์ด 7๋ฏธํ„ฐ๋ฅผ ์ง‘์— ๋“ค๊ณ  ๊ฐ„๋‹ค) ์ ˆ๋‹จ๊ธฐ์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋†’์ด๋Š” ์–‘์˜ ์ •์ˆ˜ ๋˜๋Š” 0์ด๋‹ค.

์ƒ๊ทผ์ด๋Š” ํ™˜๊ฒฝ์— ๋งค์šฐ ๊ด€์‹ฌ์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์—, ๋‚˜๋ฌด๋ฅผ ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ์ง‘์œผ๋กœ ๊ฐ€์ ธ๊ฐ€๋ ค๊ณ  ํ•œ๋‹ค. ์ด๋•Œ, ์ ์–ด๋„ M๋ฏธํ„ฐ์˜ ๋‚˜๋ฌด๋ฅผ ์ง‘์— ๊ฐ€์ ธ๊ฐ€๊ธฐ ์œ„ํ•ด์„œ ์ ˆ๋‹จ๊ธฐ์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋†’์ด์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋‚˜๋ฌด์˜ ์ˆ˜ N๊ณผ ์ƒ๊ทผ์ด๊ฐ€ ์ง‘์œผ๋กœ ๊ฐ€์ ธ๊ฐ€๋ ค๊ณ  ํ•˜๋Š” ๋‚˜๋ฌด์˜ ๊ธธ์ด M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000)

๋‘˜์งธ ์ค„์—๋Š” ๋‚˜๋ฌด์˜ ๋†’์ด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‚˜๋ฌด์˜ ๋†’์ด์˜ ํ•ฉ์€ ํ•ญ์ƒ M๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์—, ์ƒ๊ทผ์ด๋Š” ์ง‘์— ํ•„์š”ํ•œ ๋‚˜๋ฌด๋ฅผ ํ•ญ์ƒ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ๋†’์ด๋Š” 1,000,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์–‘์˜ ์ •์ˆ˜ ๋˜๋Š” 0์ด๋‹ค.

 

์ถœ๋ ฅ

์ ์–ด๋„ M๋ฏธํ„ฐ์˜ ๋‚˜๋ฌด๋ฅผ ์ง‘์— ๊ฐ€์ ธ๊ฐ€๊ธฐ ์œ„ํ•ด์„œ ์ ˆ๋‹จ๊ธฐ์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋†’์ด์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

 

 

 

 

 

โœ’๏ธ ํ’€์ด

 ๐Ÿ’ก ์ž๋ฃŒํ˜•์˜ ๋ฒ”์œ„๋ฅผ ์ž˜ ์ƒ๊ฐํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

 ๊ฐ€์ ธ๊ฐ€๋ ค๋Š” ์ด ๋‚˜๋ฌด ๊ธธ์ด์˜ ์ตœ์†Œ๊ฐ€ M๋ฏธํ„ฐ์ธ๋ฐ, M์˜ ์ตœ๋Œ€์น˜๊ฐ€ 20์–ต ์ •๋„์ด๋ฏ€๋กœ ์กฐ๊ธˆ ๋งŽ์ด ์ž๋ฅผ ๊ฒฝ์šฐ INTํ˜• ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„์ธ ์•ฝ 21์–ต์„ ๋„˜์–ด๊ฐˆ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

 ๋”ฐ๋ผ์„œ ์ž๋ฅธ ๊ธธ์ด๋ฅผ ํ•ฉํ•˜๋Š” ๋ณ€์ˆ˜ํƒ€์ž…์„ long์œผ๋กœ ์„ ์–ธํ•ด์ค˜์•ผ ๋ฌธ์ œ๊ฐ€ ์•ˆ๋‚œ๋‹ค. 

 

 ๊ณต์œ ๊ธฐ ์„ค์น˜ ๋ฌธ์ œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ ์ ์ ˆ๋†’์ด๋ฅผ ์ฐพ์•„๊ฐ€๋Š” ๋ฌธ์ œ์ด๋‹ค.

 โ—ป๏ธ ์ž…๋ ฅ๋œ ๋‚˜๋ฌด๋“ค์˜ ๊ธธ์ด๋ฅผ ์ •๋ ฌํ•œ๋‹ค.

 โ—ป๏ธ ์‹œ์ž‘์€ ์ œ์ผ ์งง์€ ๋‚˜๋ฌด์™€ ์ œ์ผ ๊ธด ๋‚˜๋ฌด์˜ ์ค‘๊ฐ„๊ฐ’์œผ๋กœ ์ ˆ๋‹จ ๋†’์ด๋ฅผ ์ •ํ•œ๋‹ค.

 โ—ป๏ธ ๋ชจ๋“  ๋‚˜๋ฌด๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ ์ ˆ๋‹จ ๋†’์ด์—์„œ ์ž˜๋ฆฌ๋Š” ๋‚˜๋ฌด ๊ธธ์ด๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ํ•ฉํ•œ๋‹ค.

 โ—ป๏ธ ์ดํ•ฉ์ด ๋ชฉํ‘œ์น˜๋ณด๋‹ค ํฌ๋ฉด ๋„ˆ๋ฌด ๋งŽ์ด ์ž˜๋ž๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ ์ ˆ๋‹จ ๋†’์ด๋ฅผ ๋†’์ด๊ณ , ๋ชฉํ‘œ์น˜๋ณด๋‹ค ๋‚ฎ์œผ๋ฉด ๋œ ์ž˜๋ž๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ ์ ˆ๋‹จ ๋†’์ด๋ฅผ ๋‚ฎ์ถ˜๋‹ค.

 โ—ป๏ธ ํƒ์ƒ‰์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

 

 

 

 

 

 

 

๐Ÿ’ป ์†Œ์Šค์ฝ”๋“œ: ์ž๋ฐ”(Java)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main_๋ฐฑ์ค€_2805_๋‚˜๋ฌด์ž๋ฅด๊ธฐ_์‹ค๋ฒ„3 {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int N = Integer.parseInt(st.nextToken()); //๋‚˜๋ฌด์˜ ์ˆ˜(1~1,000,000)
		int M = Integer.parseInt(st.nextToken()); //๊ฐ€์ ธ๊ฐˆ ๋‚˜๋ฌด์˜ ๊ธธ์ด(1~20์–ต)
		
		int[] trees = new int[N];
		st = new StringTokenizer(br.readLine());
		for (int i = 0; i < N; i++) {
			trees[i] = Integer.parseInt(st.nextToken());
		}//input
		Arrays.sort(trees);
		
		int left = 1;
		int right = trees[N-1];
		int result = 0;
		
		while(left<=right) {
			int mid = (left+right)/2;
			
			// M์ด 20์–ต์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฅธ ํ•ฉ์ด INT๋ฒ”์œ„(21์–ต)์„ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค
			long sum = 0;
			for (int i = 0; i < N; i++) {
				if(trees[i]>=mid) {
					sum += (trees[i]-mid);
				}
			}
			
			if(sum>=M) {
				result = mid;
				// ๋„ˆ๋ฌด ๋งŽ์ด ์ž๋ฅธ ๊ฒƒ์ผ ์ˆ˜ ์žˆ์œผ๋‹ˆ, ์ ˆ๋‹จ๊ธฐ ๋†’์ด๋ฅผ ๋†’์—ฌ๋ณธ๋‹ค.
				left = mid+1;
			}else {
				right = mid-1;
			}
		}
		
		System.out.println(result);
	}//end of main
}//end of class

 

 

 

 

 

 

 

 

 

๐Ÿ’Ž ๐Ÿ’Ž ๐Ÿ’Ž

 

 

๏ผฐ๏ฝ๏ฝ“๏ฝ”๏ฝ…๏ฝ„ ๏ผข๏ฝ™ ๏ผณ๏ผก๏ผน

๐˜›๐˜ฉ๐˜ข๐˜ฏ๐˜ฌ๐˜ด ๐˜ง๐˜ฐ๐˜ณ ๐˜ณ๐˜ฆ๐˜ข๐˜ฅ๐˜ช๐˜ฏ๐˜จ