Skip to content

Commit 418c176

Browse files
week13 mission insert-interval
1 parent b8d42fd commit 418c176

File tree

1 file changed

+101
-0
lines changed

1 file changed

+101
-0
lines changed
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
- ๋ฌธ์ œ: https://leetcode.com/problems/insert-interval/
2+
- ํ’€์ด: https://algorithm.jonghoonpark.com/2024/02/14/leetcode-57
3+
4+
## Merge Intervals ๋ฌธ์ œ ๋‹ต์•ˆ ์‘์šฉํ•˜๊ธฐ
5+
6+
๋ฐ”๋กœ ์ „์— ํ’€์—ˆ๋˜ [Merge Intervals](https://algorithm.jonghoonpark.com/2024/07/23/leetcode-56)๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์„œ ํ•ด๋ณด์•˜๋”๋‹ˆ ํ†ต๊ณผ ๋œ๋‹ค.
7+
8+
```java
9+
public int[][] insert(int[][] intervals, int[] newInterval) {
10+
int[][] newIntervals = Arrays.copyOf(intervals, intervals.length + 1);
11+
newIntervals[intervals.length] = newInterval;
12+
return merge(newIntervals);
13+
}
14+
15+
public int[][] merge(int[][] intervals) {
16+
Arrays.sort(intervals, Comparator.comparingInt(o -> o[0]));
17+
18+
Deque<int[]> intervalDeque = new ArrayDeque<>();
19+
intervalDeque.add(intervals[0]);
20+
for(int i = 1; i < intervals.length; i++) {
21+
int[] lastElement = intervalDeque.getLast();
22+
int[] nextElement = intervals[i];
23+
24+
if (lastElement[1] >= nextElement[0]) {
25+
int[] mergedElement = new int[]{
26+
lastElement[0],
27+
Math.max(lastElement[1], nextElement[1])
28+
};
29+
intervalDeque.removeLast();
30+
intervalDeque.add(mergedElement);
31+
} else {
32+
intervalDeque.add(nextElement);
33+
}
34+
}
35+
36+
return intervalDeque.toArray(int[][]::new);
37+
}
38+
```
39+
40+
### TC, SC
41+
42+
์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” `O(n*logn)` ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” `O(n)` ์ด๋‹ค. (๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ๋œ `int[][]`๋Š” ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š”๋‹ค.)
43+
44+
## ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•œ ๋‹ต์•ˆ (pointer ์‚ฌ์šฉ)
45+
46+
๋ฌธ์ œ๋ฅผ ์ž˜ ์ฝ์–ด๋ณด๋ฉด intervals ์˜ ๊ฒฝ์šฐ start๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ด๋ฏธ ์ •๋ ฌ์ด ๋˜์–ด์žˆ๋‹ค๊ณ  ํ•˜์˜€๊ธฐ ๋–„๋ฌธ์— ๋”ฐ๋กœ ์ •๋ ฌ์„ ํ•ด์ค„ ํ•„์š”๋Š” ์—†๋‹ค.
47+
for loop ์—์„œ๋Š” start, end pointer๋ฅผ ์ด์šฉํ•ด์„œ ์–ด๋А ๊ตฌ๊ฐ„์ด ๋ณ‘ํ•ฉ๋˜๋Š”์ง€ ๊ธฐ์–ตํ•ด๋‘๊ณ , ์ตœ์ข…์ ์œผ๋กœ ๋ณ‘ํ•ฉ์„ ์ง„ํ–‰ํ•œ๋‹ค.
48+
49+
start ๊ฐ€ -1 ์ธ ๊ฒฝ์šฐ๋Š” ๋งจ ์˜ค๋ฅธ์ชฝ์— ์ถ”๊ฐ€๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๊ณ 
50+
end ๊ฐ€ -1 ์ธ ๊ฒฝ์šฐ๋Š” ๋งจ ์™ผ์ชฝ์— ์ถ”๊ฐ€๊ฐ€๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
51+
๊ทธ ์™ธ์—๋Š” ๋ณ‘ํ•ฉ์ด ๋ฐœ์ƒํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ๋ณ‘ํ•ฉ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.
52+
53+
```java
54+
class Solution {
55+
public int[][] insert(int[][] intervals, int[] newInterval) {
56+
int start = -1;
57+
int end = -1;
58+
59+
for (int i = 0; i < intervals.length; i++) {
60+
if (start == -1 && intervals[i][1] >= newInterval[0]) {
61+
start = i;
62+
}
63+
64+
if (newInterval[1] >= intervals[i][0]) {
65+
end = i;
66+
}
67+
}
68+
69+
if (start == -1) {
70+
int[][] newIntervals = Arrays.copyOf(intervals, intervals.length + 1);
71+
newIntervals[intervals.length] = newInterval;
72+
return newIntervals;
73+
}
74+
75+
if (end == -1) {
76+
int[][] newIntervals = new int[intervals.length + 1][2];
77+
newIntervals[0] = newInterval;
78+
System.arraycopy(intervals, 0, newIntervals, 1, newIntervals.length - 1);
79+
return newIntervals;
80+
}
81+
82+
int[][] newIntervals = new int[intervals.length - (end - start)][2];
83+
84+
if (start >= 0) {
85+
System.arraycopy(intervals, 0, newIntervals, 0, start);
86+
}
87+
88+
newIntervals[start] = new int[]{Math.min(intervals[start][0], newInterval[0]), Math.max(intervals[end][1], newInterval[1])};
89+
90+
if (intervals.length - (end + 1) >= 0) {
91+
System.arraycopy(intervals, end + 1, newIntervals, end + 1 - (end - start), intervals.length - (end + 1));
92+
}
93+
94+
return newIntervals;
95+
}
96+
}
97+
```
98+
99+
#### TC, SC
100+
101+
์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” `O(n)` ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” `O(1)` ์ด๋‹ค. (๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ๋œ `int[][]`๋Š” ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š”๋‹ค.)

0 commit comments

Comments
ย (0)