Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 코딩 테스트
- 1300번
- Adapater Pattern
- 코딩테스트
- Design Patterns
- 2166번
- 11286번
- 1043번
- programmers
- 냄새와 휴리스틱
- BOJ
- Design Pattern
- Spring
- 2206번
- 9장
- 클린코드
- DxTrace
- 자바의 정석
- java
- java의 정석
- 가장 긴 증가하는 부분 수열2
- 2156번
- 10830번
- 백준
- springboot
- 11758번
- Dxerr.h
- 17장
- 프로그래머스
- SerialDate 리펙터링
Archives
- Today
- Total
Don't give up!
[백준] 1931번 : 회의실 배정 (java) 본문
어떻게 생각하고 문제를 풀었는가?
한 회의실에서 진행 가능한 최대 회의의 수는 시작시간이 빠르고, 종료시간이 빠른 순으로 회의를 선택하는 경우입니다.
따라서 N개의 회의 정보를 종료시간과 시작시간에 따라 정렬한다면 문제를 해결할 수 있을 것이라고 생각하였습니다.
코드
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(reader.readLine());
StringTokenizer tokenizer;
PriorityQueue<Reservation> reservations = new PriorityQueue<>();
for(int i=0; i<N; i++){
tokenizer = new StringTokenizer(reader.readLine());
int start = Integer.parseInt(tokenizer.nextToken());
int end = Integer.parseInt(tokenizer.nextToken());
reservations.add(new Reservation(start, end));
}
reader.close();
int max = 1;
int previous = reservations.poll().end;
while(!reservations.isEmpty()){
Reservation current = reservations.poll();
if(!current.isOverlap(previous)){
max++;
previous = current.end;
}
}
System.out.println(max);
}
public static class Reservation implements Comparable<Reservation>{
int start;
int end;
Reservation(int start, int end){
this.start = start;
this.end = end;
}
@Override
public int compareTo(Reservation reservation){
if(this.end > reservation.end)
return 1;
if(this.end < reservation.end)
return -1;
return this.start > reservation.start ? 1 : -1;
}
boolean isOverlap(int end){
return this.start < end;
}
}
}
Priority Queue를 사용하여 문제를 해결하는 코드를 구현하였습니다.
회의의 시작시간과 종료시간을 담는 클래스 Reservation을 정의하고, Priority Queue에 삽입함으로써 정렬을 수행한 결과를 얻을 수 있습니다.
Priority Queue는 Comparable을 인자로 받거나, 클래스가 Comparable을 상속받아야 정렬을 수행할 수 있습니다.
저는 Comparable을 상속받고, compareTo를 오버라이딩하여 사용하였습니다.
종료시간이 작은 순으로 정렬하고, 종료시간이 같다면 시작시간이 작은 순으로 정렬이 이루어지도록 compareTo를 정의하였습니다.
'Coding Test > BOJ' 카테고리의 다른 글
[백준] 2166번 : 다각형의 면적 (java) (0) | 2021.08.15 |
---|---|
[백준] 1043번: 거짓말 (java) (0) | 2021.08.11 |
[백준] 2206번 : 벽 부수고 이동하기 (java) (0) | 2021.08.10 |