STUDY ๐Ÿ’›/์•Œ๊ณ ๋ฆฌ์ฆ˜

[BOJ] 2110 ๊ณต์œ ๊ธฐ ์„ค์น˜_JAVA

DONI. 2021. 2. 3. 20:42
๋ฐ˜์‘ํ˜•

 

[ ๋ฌธ์ œ ]

www.acmicpc.net/problem/2110

 

2110๋ฒˆ: ๊ณต์œ ๊ธฐ ์„ค์น˜

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

www.acmicpc.net

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

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

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


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


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

 

 

 

 


 

[Solution 1]
- ๊ฒฐ๊ณผ๋Š” ๋งž์ง€๋งŒ ์‹œ๊ฐ„์ดˆ๊ณผ
- ์ž…๋ ฅ์กฐ๊ฑด์ด ‘2 ≤ N ≤ 200,000’ ‘0 ≤ xi ≤ 1,000,000,000’์ธ๋ฐ ๋‹น์—ฐ์“ฐ...
- ์ด๋ ‡๊ฒŒ ๋ง๋„์•ˆ๋˜๋Š” max๊ฐ’์ด ์ฃผ์–ด์ง„๋‹ค๋ฉด ์ด์ง„ํƒ์ƒ‰์œผ๋กœ ์ ‘๊ทผํ•ด๋ณด๊ธฐ

package boj2110_๊ณต์œ ๊ธฐ์„ค์น˜;

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

public class Main {
	static int c, n;
	static int[] combi;
	static int [] hp;
	static PriorityQueue<Integer> minArr = new PriorityQueue<Integer>(Collections.reverseOrder());
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		n = Integer.parseInt(st.nextToken());	//๋„ํ˜„์ด์ง‘ ๊ฐœ์ˆ˜
		c = Integer.parseInt(st.nextToken());	//๊ณต์œ ๊ธฐ ๊ฐœ์ˆ˜
		
		hp = new int[n];
		combi = new int[c];
		
		for(int i=0; i<n; i++) {
			st = new StringTokenizer(br.readLine());
			hp[i] = Integer.parseInt(st.nextToken());
		}
		Arrays.sort(hp);
		combination(0, 0);
		
		System.out.println("RESULT : " + minArr.poll());
	}
	
	static void combination(int r, int start) {
		if(r == c) {
			int min = hp[n-1];
			for(int i=0; i<c-1; i++) {
				if(i+1 < c) {
					min = Math.min(min, combi[i+1] - combi[i]);
				}
			}
			minArr.add(min);
			
			return;
		}
		
		for(int i=start; i<n; i++) {
			combi[r] = hp[i];
			combination(r+1, i+1);
		}
	}
}

 

 

[Solution 2]
- ์ด์ง„ํƒ์ƒ‰

package boj2110_๊ณต์œ ๊ธฐ์„ค์น˜;

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

public class Main2 {
	static int c, n;
	static int [] hp;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		n = Integer.parseInt(st.nextToken());	//๋„ํ˜„์ด์ง‘ ๊ฐœ์ˆ˜
		c = Integer.parseInt(st.nextToken());	//๊ณต์œ ๊ธฐ ๊ฐœ์ˆ˜
		
		hp = new int[n];
		
		for(int i=0; i<n; i++) {
			st = new StringTokenizer(br.readLine());
			hp[i] = Integer.parseInt(st.nextToken());
		}
		Arrays.sort(hp);
		
		int min = 1;				//๊ณต์œ ๊ธฐ๊ฐ„ ์ตœ์†Œ๊ฑฐ๋ฆฌ
		int max = hp[n-1] - 1;		//๊ณต์œ ๊ธฐ ๊ฐ„ ์ตœ๋Œ€๊ฑฐ๋ฆฌ
		int answer = 0;
		
		while(min <= max) {
			int middle = (max+min)/2;		//๊ณต์œ ๊ธฐ ๊ฑฐ๋ฆฌ ๊ธฐ์ค€
			int prev = hp[0];				//์ฒซ ์œ„์น˜ ์„ค์น˜
			int cnt = 1;					//์„ค์น˜ํ•œ ๊ณต์œ ๊ธฐ ์ˆ˜
			
			for(int i=0; i<n; i++) {
				int distance = hp[i] - prev;	//๊ฑฐ๋ฆฌ์ฐจ
				
				if(distance >= middle) {		//๊ฑฐ๋ฆฌ์ฐจ๊ฐ€ ๊ธฐ์ค€๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์•„์•ผ ์„ค์น˜ ๊ฐ€๋Šฅ
					cnt++;
					prev = hp[i];
				}
			}
			
			//๊ณต์œ ๊ธฐ ์„ค์น˜๊ฐ€ c๋ณด๋‹ค ๋” ๋งŽ์œผ๋ฉด ๊ฐ„๊ฒฉ์„ ๋„“ํ˜€์„œ ๊ฐœ์ˆ˜๋ฅผ ์ค„์ž„
			if(cnt >= c) {
				min = middle + 1;
				answer = middle;
			} else {
				max = middle - 1;
			}
		}
		System.out.println(answer);
	}
}
๋ฐ˜์‘ํ˜•