문제 설명
한 회의실에서 여러 회의를 하려고 한다.
각 회의는 시작시간과 종료시간이 주어지고,
겹치지 않게 최대한 많은 회의를 배정하려고 한다.
- 단, 끝나는 시간과 동시에 다음 회의 시작 가능
- 중간 중단 불가
입력 & 출력
입력
5
1 4
2 3
3 5
4 6
5 7
출력
3
해결 방법
- 빨리 끝나는 회의를 우선 배정하면 다음 회의에 더 많은 기회 확보 가능
- 따라서 종료 시간 기준으로 오름차순 정렬
- 종료 시간이 같다면 시작 시간이 빠른 순으로 정렬
- 각 회의마다 직전 회의의 종료 시간 이후에 시작하면 배정
코드 구현
import java.util.*;
class Meeting implements Comparable<Meeting> {
int start, end;
Meeting(int start, int end) {
this.start = start;
this.end = end;
}
@Override
public int compareTo(Meeting o) {
if (this.end == o.end) return this.start - o.start;
return this.end - o.end;
}
}
public class Problem2 {
public int solution(ArrayList<Meeting> arr) {
Collections.sort(arr);
int answer = 0, last = 0;
for (Meeting m : arr) {
if (last <= m.start) {
answer++;
last = m.end;
}
}
return answer;
}
public static void main(String[] args) {
Problem2 T = new Problem2();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
ArrayList<Meeting> arr = new ArrayList<>();
for (int i = 0; i < n; i++) {
int start = sc.nextInt();
int end = sc.nextInt();
arr.add(new Meeting(start, end));
}
System.out.print(T.solution(arr));
sc.close();
}
}
코드 설명
- Meeting: 회의 시작/종료 정보를 담은 클래스
- compareTo: 종료 시간 기준 정렬, 같으면 시작 시간 기준
- solution():
- 회의를 정렬 후, 이전 회의 종료 시각 last를 기준으로 배정 여부 결정
- if (last <= m.start) → 회의 배정, 종료 시간 갱신
시간 복잡도
- 정렬: O(N log N)
- 순회: O(N)
- 전체 시간 복잡도: O(N log N)
N ≤ 100,000이므로 정렬 기반 풀이가 최적이다.
출처: 인프런 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
https://www.inflearn.com/course/자바-알고리즘-문제풀이-코테대비/dashboard
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 강의 | 김태원 - 인프런
김태원 | , 자바(Java) 알고리즘 문제풀이 채점사이트를 통해 기초부터 준비해보세요! 💪 [사진] 이 강의는 [사진] 자바(Java)로 코딩테스트 준비를 하고 계신 분께 추천드려요! 문제는 기초~ 중급
www.inflearn.com
'코딩테스트 > 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비' 카테고리의 다른 글
| 섹션 9 Greedy - 4. 최대 수입 스케쥴(PriorityQueue 응용문제) (0) | 2025.06.11 |
|---|---|
| 섹션 9 Greedy - 3. 결혼식 (1) | 2025.06.10 |
| 섹션 9 Greedy - 1. 씨름 선수 (0) | 2025.06.10 |
| 섹션 8 DFS, BFS - 14. 피자 배달 거리(삼성 SW역량평가 기출문제 : DFS활용) (2) | 2025.06.09 |
| 섹션 8 DFS, BFS - 13. 섬나라 아일랜드(BFS) (1) | 2025.06.09 |