Skip to content

Commit 1873814

Browse files
add post '(Leetcode) 253 - Meeting Room ii 풀이 (Meeting Schedule ii)'
1 parent c8e8948 commit 1873814

File tree

2 files changed

+84
-1
lines changed

2 files changed

+84
-1
lines changed

_posts/2024-05-14-leetcode-252.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
layout: post
3-
title: (Leetcode) 252 - Meeting Schedule
3+
title: (Leetcode) 252 - Meeting Room 풀이 (Meeting Schedule)
44
categories: [스터디-알고리즘]
55
tags:
66
[자바, java, 리트코드, Leetcode, 알고리즘, algorithm, list, 리스트, neetcode]

_posts/2024-07-22-leetcode-253.md

+83
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
---
2+
layout: post
3+
title: (Leetcode) 253 - Meeting Room ii 풀이 (Meeting Schedule ii)
4+
categories: [스터디-알고리즘]
5+
tags: [자바, java, 리트코드, Leetcode, 알고리즘, interval, array, sorting]
6+
date: 2024-07-22 19:30:00 +0900
7+
toc: true
8+
---
9+
10+
기회가 되어 [달레님의 스터디](https://github.com/DaleStudy/leetcode-study)에 참여하여 시간이 될 때마다 한문제씩 풀어보고 있다.
11+
12+
[https://neetcode.io/practice](https://neetcode.io/practice)
13+
14+
---
15+
16+
- 문제
17+
- 유료: [https://leetcode.com/problems/meeting-rooms-ii/](https://leetcode.com/problems/meeting-rooms-ii/)
18+
- 무료: [https://neetcode.io/problems/meeting-schedule-ii](https://neetcode.io/problems/meeting-schedule-ii)
19+
20+
## 내가 작성한 풀이
21+
22+
지난번에 풀었던 [meeting room](https://algorithm.jonghoonpark.com/2024/05/14/leetcode-252) 문제의 심화버전이다.
23+
해당 문제에서 사용했던 풀이를 재활용하였다.
24+
25+
먼저 intervals를 정렬한다.
26+
이후 반복문을 통해 interval을 추가해나가는데, 만약 겹치는 시간대가 있을 경우 새로운 날짜를 생성한다.
27+
28+
```java
29+
public class Solution {
30+
public int minMeetingRooms(List<Interval> intervals) {
31+
intervals = intervals.stream().sorted(Comparator.comparingInt(o -> o.start)).toList();
32+
33+
List<List<Interval>> days = new ArrayList<>();
34+
35+
for(Interval interval : intervals) {
36+
boolean added = false;
37+
for (List<Interval> day : days) {
38+
day.add(interval);
39+
if (canAttendMeetings(day)) {
40+
added = true;
41+
break;
42+
}
43+
day.remove(day.size() - 1);
44+
}
45+
46+
if (!added) {
47+
List<Interval> newDay = new ArrayList<>();
48+
newDay.add(interval);
49+
days.add(newDay);
50+
}
51+
}
52+
53+
return days.size();
54+
}
55+
56+
public boolean canAttendMeetings(List<Interval> intervals) {
57+
for (int i = 0; i < intervals.size() - 1; i++) {
58+
if(intervals.get(i).end > intervals.get(i+1).start) {
59+
return false;
60+
}
61+
}
62+
return true;
63+
}
64+
}
65+
66+
class Interval {
67+
public int start, end;
68+
69+
public Interval(int start, int end) {
70+
this.start = start;
71+
this.end = end;
72+
}
73+
74+
@Override
75+
public String toString() {
76+
return "{" + start + ", " + end + "}";
77+
}
78+
}
79+
```
80+
81+
### TC, SC
82+
83+
days의 길이를 m 이라고 했을 때, 시간 복잡도는 `O(n^2 * m)` 공간 복잡도는 `O(n)` 이다. m 은 최악의 경우 n 이 될 수 있다.

0 commit comments

Comments
 (0)