01-24 13:36
Recent Posts
Recent Comments
๊ด€๋ฆฌ ๋ฉ”๋‰ด

miinsun

[BAEKJOON] ๋ฐฑ์ค€ ์ด๋ถ„๊ฒ€์ƒ‰ 2805 :: ๋‚˜๋ฌด ์ž๋ฅด๊ธฐ ๋ณธ๋ฌธ

Algorithm/Baekjoon

[BAEKJOON] ๋ฐฑ์ค€ ์ด๋ถ„๊ฒ€์ƒ‰ 2805 :: ๋‚˜๋ฌด ์ž๋ฅด๊ธฐ

miinsun 2022. 4. 7. 18:19

๐Ÿ’ฌ  ๋ฌธ์ œ ์„ค๋ช…

์ƒ๊ทผ์ด๋Š” ๋‚˜๋ฌด 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๋ฏธํ„ฐ์˜ ๋‚˜๋ฌด๋ฅผ ์ง‘์— ๊ฐ€์ ธ๊ฐ€๊ธฐ ์œ„ํ•ด์„œ ์ ˆ๋‹จ๊ธฐ์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋†’์ด์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ 1)

4 7
20 15 10 17

 

์˜ˆ์ œ ์ถœ๋ ฅ 1)

15

 

์˜ˆ์ œ ์ž…๋ ฅ 2)

5 20
4 42 40 26 46

 

์˜ˆ์ œ ์ถœ๋ ฅ 2)

5 20
4 42 40 26 46

โ€‹

โ€‹

๐Ÿ’ป  Main.java

  • '1654 - ๋žœ์„  ์ž๋ฅด๊ธฐ ๋ฌธ์ œ'์™€ ์œ ์‚ฌํ•˜๋‹ค.
  • ์ด๋ถ„๊ฒ€์ƒ‰, ๊ฒฐ์ •์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•œ๋‹ค.
  • lt์™€ rt๋ฅผ ์„ค์ •ํ•˜๊ณ  ์ตœ๋Œ€๊ฐ’์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€, mid๊ฐ’์„ ์กฐ์ •ํ•ด์ค€๋‹ค.
  • mid๊ฐ’์ด int๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜๋„ ์žˆ๊ธฐ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐํ˜•์€ long์œผ๋กœ ํ•ด์คฌ๋‹ค.
/* ๋ฐฑ์ค€ ๊ทธ๋ž˜ํ”„ - 2805 :: ๋‚˜๋ฌด ์ž๋ฅด๊ธฐ */

import java.util.*;
import java.io.*;

public class Main {	
	static public long count (int[] arr, long mid) {
		long total = 0;
		
		// mid๋กœ ๋บ์„ ๋•Œ, ๋‚จ๋Š” ๋‚˜๋ฌด ๊ธธ์ด์˜ ํ•ฉ
		for(int x : arr) {
			// ๋‚จ๋Š” ๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ
			if(x - mid > 0)
				total += x - mid;
		}
		return total;
	}
	
	public static void main(String[] args) throws IOException{
		Scanner sc = new Scanner(System.in);
		// ๋‚˜๋ฌด์˜ ์ˆ˜
		int n = sc.nextInt();
		// ์ง‘์œผ๋กœ ๊ฐ€์ ธ๊ฐˆ ๋‚˜๋ฌด ๊ธธ์ด
		int m = sc.nextInt();
		
		// ๋‚˜๋ฌด ์ •๋ณด ์ž…๋ ฅ
		int [] arr = new int [n];
 		for(int i = 0; i < n; i++) {
			arr[i] = sc.nextInt();
		}
 		
 		// ๋ฐฐ์—ด ์ •๋ ฌ, lt,rt ์ดˆ๊ธฐํ™”
 		Arrays.sort(arr);
 		long lt = 1;
 		long rt = arr[n-1];
 		long answer = 0;
 		
 		// ์ด๋ถ„ ํƒ์ƒ‰ (๊ฒฐ์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜)
		while(lt <= rt) {
			long mid = (lt + rt) / 2;
			// count()๋Š” ์œ ํšจ๊ฐ’์„ ์ฐพ๋Š” ํ•จ์ˆ˜
			if(count(arr, mid) >= m) {
				answer = mid;
				// ์ตœ๋Œ€๊ฐ’์„ ์ฐพ๊ธฐ ๋•Œ๋ฌธ์— ์œ ํšจ๊ฐ’์„ ์ฐพ์œผ๋ฉด ๋ฒ”์œ„๋ฅผ ๋„“ํ˜€์ค€๋‹ค.
				lt = mid + 1;
			}
			else
				rt = mid - 1;
		}
		
		System.out.println(answer);
		sc.close();
	}
}
Comments