Skip to content

Commit bd71f3b

Browse files
add post '(Leetcode) 56 - Merge Intervals 풀이'
1 parent 1a3b442 commit bd71f3b

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

_posts/2024-07-23-leetcode-56.md

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
---
2+
layout: post
3+
title: (Leetcode) 56 - Merge Intervals 풀이
4+
categories: [스터디-알고리즘]
5+
tags: [자바, java, 리트코드, Leetcode, 알고리즘, interval, array, merge]
6+
date: 2024-07-23 11:00: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+
[https://leetcode.com/problems/merge-intervals](https://leetcode.com/problems/merge-intervals)
17+
18+
## 내가 작성한 풀이
19+
20+
각 interval 을 start 를 기준으로 정렬한다. 이후 merge를 진행한다.
21+
22+
Deque는 Stack처럼 사용하려고 사용하였다. (사실 List여도 상관 없다.)
23+
Deque에 있는 마지막 Element와 다음에 추가하려고 하는 Element를 비교하여 merge할 수 있으면 merge 하고 그렇지 않으면 새로 Deque 에 추가한다.
24+
25+
```java
26+
class Solution {
27+
public int[][] merge(int[][] intervals) {
28+
Arrays.sort(intervals, Comparator.comparingInt(o -> o[0]));
29+
30+
Deque<int[]> intervalDeque = new ArrayDeque<>();
31+
intervalDeque.add(intervals[0]);
32+
for(int i = 1; i < intervals.length; i++) {
33+
int[] lastElement = intervalDeque.getLast();
34+
int[] nextElement = intervals[i];
35+
36+
if (lastElement[1] >= nextElement[0]) {
37+
int[] mergedElement = new int[]{
38+
lastElement[0],
39+
Math.max(lastElement[1], nextElement[1])
40+
};
41+
intervalDeque.removeLast();
42+
intervalDeque.add(mergedElement);
43+
} else {
44+
intervalDeque.add(nextElement);
45+
}
46+
}
47+
48+
return intervalDeque.toArray(int[][]::new);
49+
}
50+
}
51+
```
52+
53+
### TC, SC
54+
55+
시간 복잡도는 `O(n*logn)` 공간 복잡도는 `O(n)` 이다. (결과를 반환하기 위해 생성된 `int[][]`는 고려하지 않는다.)

0 commit comments

Comments
 (0)