ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [BOJ] 2110 ๊ณต์œ ๊ธฐ ์„ค์น˜_JAVA
    STUDY ๐Ÿ’›/์•Œ๊ณ ๋ฆฌ์ฆ˜ 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);
    	}
    }
    ๋ฐ˜์‘ํ˜•
Designed by Tistory.