|
| 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