코딩테스트 준비/기타문제
[JAVA][Array] MeetingRoom
AtoZ 개발자
2021. 1. 25. 21:41
반응형
1. 문제
Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si < ei), determine if a person could attend all meetings.
Input: [[0,30],[5,10],[15,20]]
Output: false
Input: [[7,10],[2,4]]
Output: true
2. 문제해설
회의실이 1개가 있는데 Input에 들어오는 사용시간으로 회의가 모두 진행이 가능한지 여부를 판단하는 문제이다.
3. 코드포맷
class Interval {
int start;
int end;
Interval() {
this.start = 0;
this.end = 0;
}
Interval(int s, int e) {
this.start = s;
this.end = e;
}
@Override
public String toString() {
return start + ", "+end;
}
}
public class MeetingRoom {
public static void main(String[] args) {
MeetingRoom a = new MeetingRoom();
Interval in1 = new Interval(15, 20);
Interval in2 = new Interval(5, 10);
Interval in3 = new Interval(0, 30);
Interval[] intervals = { in1, in2, in3 };
System.out.println(a.solve(intervals));
}
}
4. 접근 방법
Input에 들어온 값을 회의 시작 시간(각 회의 배열의 0번 인덱스)을 기준으로 정렬해주고 회의 끝날시간(각 회의 배열의 1번 인덱스) 과 그 다음 회의 시작 시간과 비교해준다.
ex) Input: [[0,30],[5,10],[15,20]] 일때 아래와 같이 겹치기 때문에 모든 회의가 진행될 수는 없습니다.
5. 코드
class Interval {
int start;
int end;
Interval() {
this.start = 0;
this.end = 0;
}
Interval(int s, int e) {
this.start = s;
this.end = e;
}
@Override
public String toString() {
return start + ", "+end;
}
}
public class MeetingRoom {
public static void main(String[] args) {
MeetingRoom a = new MeetingRoom();
Interval in1 = new Interval(15, 20);
Interval in2 = new Interval(5, 10);
Interval in3 = new Interval(0, 30);
Interval[] intervals = { in1, in2, in3 };
System.out.println(a.solve(intervals));
}
private boolean solve(Interval[] intervals) {
//정렬
Arrays.sort(intervals,comp);
for(int i=0;i<intervals.length-1;i++) {
if(intervals[i].end>=intervals[i+1].start) {
return false;
}
}
return true;
}
//비교시 기준을 만들기 위해 사용
Comparator<Interval> comp = new Comparator<Interval>() {
@Override
public int compare(Interval o1, Interval o2) {
return o1.start-o2.start;
}
};
}
반응형