MeetingRoom2

์•Œ๊ณ ๋ฆฌ์ฆ˜ 1. sorting by start time 2. create a PriorityQueue by end time. 3. before.end <= after.start : ํ•ฉ์น˜๊ธฐ before.end > after.start : ํšŒ์˜์‹ค 1๊ฐœ ์ถ”๊ฐ€ ํ•„์š”. 4. ์ตœ์ข…์ ์œผ๋กœ heap์˜ ํฌ๊ธฐ๊ฐ€ ์ •๋‹ต(ํ•„์š”ํ•œ ๋ฏธํŒ…๋ฃธ ๊ฐฏ์ˆ˜)๊ฐ€ ๋œ๋‹ค.

ํ•„์š”ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ : Heap

: BST ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์‹œ๊ฐ„๋ณต์žก๋„๋Š” nlogn end์‹œ๊ฐ„์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ MinHeap์„ ๊ตฌ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

package java_basic;

import java.util.Arrays;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;

class Interval {
	int start;
	int end;
	Interval() {start = 0; end = 0;}
	Interval(int s, int e) {start = s; end = e;}
}
public class MeetingRoom2 {

	public static void main(String[] args) {
		Interval in1 = new Interval(5,10);
		Interval in2 = new Interval(0,30);
		Interval in3 = new Interval(15,25);

		Interval[] intervals = {in1,in2,in3};
		
		MeetingRoom2 MR2 = new MeetingRoom2();
		/*int result = MR2.solve(intervals);
		
		System.out.println("ํ•„์š”ํ•œ ๋ฏธํŒ…๋ฃธ ๊ฐฏ์ˆ˜ :" + result);*/
		System.out.println(MR2.solve(intervals));
	}

	public int solve(Interval[] intervals) {
		if(intervals == null || intervals.length == 0) return 0;
		
		
		//์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„.
		//1. start time์œผ๋กœ ์ •๋ ฌ. ๋ฐ›์€ intervals๊ฐ€ ๋ฐฐ์—ด์ด๋‹ˆ๊นŒ
		Arrays.sort(intervals,(a,b)->(a.start-b.start));
		
		//2. end time์œผ๋กœ ์ •๋ ฌ, ์šฐ์„ ์ˆœ์œ„ํ MinHeap.
		Queue<Interval> minHeap = new PriorityQueue<Interval>(intervals.length,Comp);
		
		minHeap.offer(intervals[0]);
		for(int i=1; i <= intervals.length;i++) {
			Interval interval = minHeap.poll();//else์ธ ๊ฒฝ์šฐ ๋‘๊ฐœ๊ฐ€ ํ•„์š”ํ•œ๋ฐ pollํ•˜๋ฉด ์–ด๋–ปํ•จ.
			if(interval.end <= intervals[i].start) {//ํ•˜๋‚˜๋กœ ํ•ฉ์นœ๋‹ค! 
				interval.end = Math.max(interval.end, intervals[i].end);
			} else {//๋ฏธํŒ…๋ฃธ ํ•˜๋‚˜ ๋” ์ƒ์„ฑ(ํž™์— ๋…ธ๋“œ ํ•˜๋‚˜ ์ถ”๊ฐ€) 
				minHeap.offer(intervals[i]);
			}
			minHeap.offer(interval);
		}
		return minHeap.size();
	}
	Comparator Comp = new Comparator<Interval>() {
		public int compare(Interval a, Interval b) {
			return a.end - b.end;
		}
	};
}

Last updated

Was this helpful?