기사 시험도 끝났겠다. 실기 준비와 틈틈히 알고리즘을 병행 해야지.
1일 1알고리즘이다.
오늘 해본 알고리즘은 미팅룸 알고리즘이다.
import java.util.Arrays;
import java.util.Comparator;
class Interval{
int start;
int end;
Interval(){
this.start = 0;
this.end = 0;
}
public Interval(int s, int e) {
this.start = s;
this.end = e;
}
}
public class MeetingRooms {
public static void main(String[] args) {
MeetingRooms a = new MeetingRooms();
Interval in1 = new Interval(15, 30);
Interval in2 = new Interval(5, 10);
Interval in3 = new Interval(0, 30);
Interval[] interval = {in1, in2, in3};
System.out.println(a.solve(interval));
}
public boolean solve(Interval[] intervals ) {
if( intervals == null ){
return false;
}
print(intervals);
Arrays.sort(intervals, Comp);
print(intervals);
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);
}
}
}
Interval 이라는 class 는
start 와 end 를 가지고 있다.
긱긱 start 값과 end 값을 대입 해주고
배열로 만들자
배열을 실어서 solve 에게 보내주지
solve 는 배열을 받아서
null 검사를 진행하고
Arrays 를 사용헤서 sort 를 한다.
배열을 정렬한다는 말인가 보다.
Comp 는 Comparator<Interval> 의 인스턴스 인데
Comparator 는 기본 정렬 기준과는 다른 방식으로 정렬하고 싶을 떄 사용하는 클래스이다.
그래서 저렇게 자동으로 Overeide가 생겼나보다. 오 공부 할 수롣록 재밌는게, 이런 기능도 있다는게 신기해
코딩을 길로 비유하면 모르면 한참 돌아가고 알면 더 쉽게 갈 수 있는 길 인거 같아
Arrays.sort ( Intervals, Comp ) => 이게 그러면 내가 설정한 정렬 방식 대로 정렬을 하겠다는 의미 이구나?!?
매개인자로 받은 o1과 o2 의 start 를 이용해서 빼기를 한다라...
예를들어
o1 의 start = 20
o2 의 start = 50
return 은 -30 인거 잖아?
아...???........ 음수값이 반환이 되면 안바꾸는구나???!!! 대박
결과 값은 정렬이 잘되어서 나온다.
오늘 Comparator 클래스 하나 익히고 기분 좋게 마무리이!
'개발중 > Algorithm' 카테고리의 다른 글
MeetingRoom2 (0) | 2020.08.25 |
---|---|
Merge 알고리즘 (0) | 2020.08.24 |
Daily Temperature (0) | 2020.08.23 |
MoveZero (0) | 2020.08.23 |
MoveZeros (0) | 2020.08.23 |