[Algorithm/java] MeetingRoom1

Jay·2020년 12월 15일
0

Algorithm

목록 보기
1/44
post-thumbnail

쉬운 배열 연산 문제

문제

미팅룸은 1개이고 예약된 시간들이 보여진다.
[시작시간, 종료시간] 형태로 배열로 받게 되며
겹치는 회의 시간이 있을 경우, false를 리턴하게 된다.

input : [[0,30],[5,10],[15,20]]
output : false

intput : [[7,10],[2,4]]
output : false

접근

  1. input배열을 start타임 기준으로 소팅을 한다.
  2. start타임 기준으로 소팅된 배열에서 앞의 end 타임과 뒤의 start 타임을 비교해서 end보다 start가 먼저라면 false를 리턴하게 된다.
  3. 이 외에는 모두 true

코드 풀이

package project;

import java.util.Arrays;
import java.util.Comparator;

class Interval{
	int start;
	int end;
	Interval(){
		this.start = 0;
		this.end =0;
	}
	Interval(int s, int e){
		this.start = s;
		this.end = e;
	}
}

public class MeetingRoom {
    //start로 소팅
    //현재의 start타임과 end타임이 겹치면 안되는 것.
    
    public static void main(String[] args) {
		MeetingRoom a = new MeetingRoom();
		
	
		Interval in1 = new Interval(7,10);
		Interval in2 = new Interval(2,4);
             
		
		Interval[] intervals = {in1, in2};
		System.out.println(a.solve(intervals));
	}
	
	public boolean solve(Interval[] intervals) {
        
        if(intervals==null) return false;
        
        
        Arrays.sort(intervals, Comp);
        print(intervals);
		
        for(int i=1; i<intervals.length; i++){
            if(intervals[i-1].end > intervals[i].start){
                return false;
            }
        }
        
        return true;
	}
    
    Comparator<Interval> Comp = new Comparator<Interval>(){
        @Override
        public int compare(Interval o1, Interval o2){
            //오름 차순으로 소팅 
            return o1.start - o2.start;
        }
        
    };
    
	public void print(Interval[] intervals) {
		for(int i=0; i<intervals.length; i++) {
			Interval in = intervals[i];
			System.out.println(in.start+" "+in.end);
			
		}
	}
		

}
profile
developer

0개의 댓글