01-09 04:37
Recent Posts
Recent Comments
๊ด€๋ฆฌ ๋ฉ”๋‰ด

miinsun

[BAEKJOON] ๋ฐฑ์ค€ ์ด๋ถ„๊ฒ€์ƒ‰ 2110 :: ๊ณต์œ ๊ธฐ ์„ค์น˜ ๋ณธ๋ฌธ

Algorithm/Baekjoon

[BAEKJOON] ๋ฐฑ์ค€ ์ด๋ถ„๊ฒ€์ƒ‰ 2110 :: ๊ณต์œ ๊ธฐ ์„ค์น˜

miinsun 2022. 4. 7. 18:42

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

๋„ํ˜„์ด์˜ ์ง‘ N๊ฐœ๊ฐ€ ์ˆ˜์ง์„  ์œ„์— ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ์ง‘์˜ ์ขŒํ‘œ๋Š” x1, ..., xN์ด๊ณ , ์ง‘ ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ๊ฐ™์€ ์ขŒํ‘œ๋ฅผ ๊ฐ€์ง€๋Š” ์ผ์€ ์—†๋‹ค.

๋„ํ˜„์ด๋Š” ์–ธ์ œ ์–ด๋””์„œ๋‚˜ ์™€์ดํŒŒ์ด๋ฅผ ์ฆ๊ธฐ๊ธฐ ์œ„ํ•ด์„œ ์ง‘์— ๊ณต์œ ๊ธฐ C๊ฐœ๋ฅผ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์ตœ๋Œ€ํ•œ ๋งŽ์€ ๊ณณ์—์„œ ์™€์ดํŒŒ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ•œ ์ง‘์—๋Š” ๊ณต์œ ๊ธฐ๋ฅผ ํ•˜๋‚˜๋งŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๊ณ , ๊ฐ€์žฅ ์ธ์ ‘ํ•œ ๋‘ ๊ณต์œ ๊ธฐ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•œ ํฌ๊ฒŒ ํ•˜์—ฌ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

C๊ฐœ์˜ ๊ณต์œ ๊ธฐ๋ฅผ N๊ฐœ์˜ ์ง‘์— ์ ๋‹นํžˆ ์„ค์น˜ํ•ด์„œ, ๊ฐ€์žฅ ์ธ์ ‘ํ•œ ๋‘ ๊ณต์œ ๊ธฐ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ตœ๋Œ€๋กœ ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

๐Ÿ”จ  ์ž…์ถœ๋ ฅ ์˜ˆ

์ž…๋ ฅ 

  • ์ฒซ์งธ ์ค„์— ์ง‘์˜ ๊ฐœ์ˆ˜ N (2 ≤ N ≤ 200,000)๊ณผ ๊ณต์œ ๊ธฐ์˜ ๊ฐœ์ˆ˜ C (2 ≤ C ≤ N)์ด ํ•˜๋‚˜ ์ด์ƒ์˜ ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค.
  • ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ์ง‘์˜ ์ขŒํ‘œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” xi (0 ≤ xi ≤ 1,000,000,000)๊ฐ€ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ

  • ์ฒซ์งธ ์ค„์— ๊ฐ€์žฅ ์ธ์ ‘ํ•œ ๋‘ ๊ณต์œ ๊ธฐ ์‚ฌ์ด์˜ ์ตœ๋Œ€ ๊ฑฐ๋ฆฌ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

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

5 3
1
2
8
4
9

 

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

3

 

๊ณต์œ ๊ธฐ๋ฅผ 1, 4, 8 ๋˜๋Š” 1, 4, 9์— ์„ค์น˜ํ•˜๋ฉด ๊ฐ€์žฅ ์ธ์ ‘ํ•œ ๋‘ ๊ณต์œ ๊ธฐ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋Š” 3์ด๊ณ , ์ด ๊ฑฐ๋ฆฌ๋ณด๋‹ค ํฌ๊ฒŒ ๊ณต์œ ๊ธฐ๋ฅผ 3๊ฐœ ์„ค์น˜ํ•  ์ˆ˜ ์—†๋‹ค.

โ€‹

๐Ÿ’ป  Main.java

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

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

public class Main {	
	static public long count (int[] arr, long dist) {
		long cnt = 1;
		// ๊ฐ€์žฅ ์™ผ์ชฝ์—๋Š” ๋ฌด์กฐ๊ฑด ๋ฐฐ์น˜
		int ep = arr[0];

		for(int i = 0; i < arr.length; i++) {
			if(arr[i] - ep >= dist) {
				cnt++;
				ep = arr[i];
			}
		}
		
		return cnt;
	}
	
	public static void main(String[] args) throws IOException{
		Scanner sc = new Scanner(System.in);
		// ์ง‘์˜ ๊ฐœ์ˆ˜
		int n = sc.nextInt();
		// ๊ณต์œ ๊ธฐ์˜ ๊ฐœ์ˆ˜
		int c = 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) {
			// mid๊ฐ’์€ ๊ฐ€์žฅ ์ธ์ ‘ํ•œ ๊ณต์œ ๊ธฐ์˜ ๊ฑฐ๋ฆฌ์ด๋‹ค.
			long mid = (lt + rt) / 2;
			// count()๋Š” ์œ ํšจ๊ฐ’์„ ์ฐพ๋Š” ํ•จ์ˆ˜
			if(count(arr, mid) >= c) {
				answer = mid;
				// ์ตœ๋Œ€๊ฐ’์„ ์ฐพ๊ธฐ ๋•Œ๋ฌธ์— ์œ ํšจ๊ฐ’์„ ์ฐพ์œผ๋ฉด ๋ฒ”์œ„๋ฅผ ๋„“ํ˜€์ค€๋‹ค.
				lt = mid + 1;
			}
			else
				rt = mid - 1;
		}
		
		System.out.println(answer);
		sc.close();
	}
}
Comments