Skip to content

Commit

Permalink
week13 mission insert-interval
Browse files Browse the repository at this point in the history
  • Loading branch information
dev-jonghoonpark committed Jul 23, 2024
1 parent b8d42fd commit 418c176
Showing 1 changed file with 101 additions and 0 deletions.
101 changes: 101 additions & 0 deletions insert-interval/dev-jonghoonpark.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
- ๋ฌธ์ œ: https://leetcode.com/problems/insert-interval/
- ํ’€์ด: https://algorithm.jonghoonpark.com/2024/02/14/leetcode-57

## Merge Intervals ๋ฌธ์ œ ๋‹ต์•ˆ ์‘์šฉํ•˜๊ธฐ

๋ฐ”๋กœ ์ „์— ํ’€์—ˆ๋˜ [Merge Intervals](https://algorithm.jonghoonpark.com/2024/07/23/leetcode-56)๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์„œ ํ•ด๋ณด์•˜๋”๋‹ˆ ํ†ต๊ณผ ๋œ๋‹ค.

```java
public int[][] insert(int[][] intervals, int[] newInterval) {
int[][] newIntervals = Arrays.copyOf(intervals, intervals.length + 1);
newIntervals[intervals.length] = newInterval;
return merge(newIntervals);
}

public int[][] merge(int[][] intervals) {
Arrays.sort(intervals, Comparator.comparingInt(o -> o[0]));

Deque<int[]> intervalDeque = new ArrayDeque<>();
intervalDeque.add(intervals[0]);
for(int i = 1; i < intervals.length; i++) {
int[] lastElement = intervalDeque.getLast();
int[] nextElement = intervals[i];

if (lastElement[1] >= nextElement[0]) {
int[] mergedElement = new int[]{
lastElement[0],
Math.max(lastElement[1], nextElement[1])
};
intervalDeque.removeLast();
intervalDeque.add(mergedElement);
} else {
intervalDeque.add(nextElement);
}
}

return intervalDeque.toArray(int[][]::new);
}
```

### TC, SC

์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” `O(n*logn)` ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” `O(n)` ์ด๋‹ค. (๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ๋œ `int[][]`๋Š” ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š”๋‹ค.)

## ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•œ ๋‹ต์•ˆ (pointer ์‚ฌ์šฉ)

๋ฌธ์ œ๋ฅผ ์ž˜ ์ฝ์–ด๋ณด๋ฉด intervals ์˜ ๊ฒฝ์šฐ start๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ด๋ฏธ ์ •๋ ฌ์ด ๋˜์–ด์žˆ๋‹ค๊ณ  ํ•˜์˜€๊ธฐ ๋–„๋ฌธ์— ๋”ฐ๋กœ ์ •๋ ฌ์„ ํ•ด์ค„ ํ•„์š”๋Š” ์—†๋‹ค.
for loop ์—์„œ๋Š” start, end pointer๋ฅผ ์ด์šฉํ•ด์„œ ์–ด๋Š ๊ตฌ๊ฐ„์ด ๋ณ‘ํ•ฉ๋˜๋Š”์ง€ ๊ธฐ์–ตํ•ด๋‘๊ณ , ์ตœ์ข…์ ์œผ๋กœ ๋ณ‘ํ•ฉ์„ ์ง„ํ–‰ํ•œ๋‹ค.

start ๊ฐ€ -1 ์ธ ๊ฒฝ์šฐ๋Š” ๋งจ ์˜ค๋ฅธ์ชฝ์— ์ถ”๊ฐ€๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๊ณ 
end ๊ฐ€ -1 ์ธ ๊ฒฝ์šฐ๋Š” ๋งจ ์™ผ์ชฝ์— ์ถ”๊ฐ€๊ฐ€๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
๊ทธ ์™ธ์—๋Š” ๋ณ‘ํ•ฉ์ด ๋ฐœ์ƒํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ๋ณ‘ํ•ฉ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

```java
class Solution {
public int[][] insert(int[][] intervals, int[] newInterval) {
int start = -1;
int end = -1;

for (int i = 0; i < intervals.length; i++) {
if (start == -1 && intervals[i][1] >= newInterval[0]) {
start = i;
}

if (newInterval[1] >= intervals[i][0]) {
end = i;
}
}

if (start == -1) {
int[][] newIntervals = Arrays.copyOf(intervals, intervals.length + 1);
newIntervals[intervals.length] = newInterval;
return newIntervals;
}

if (end == -1) {
int[][] newIntervals = new int[intervals.length + 1][2];
newIntervals[0] = newInterval;
System.arraycopy(intervals, 0, newIntervals, 1, newIntervals.length - 1);
return newIntervals;
}

int[][] newIntervals = new int[intervals.length - (end - start)][2];

if (start >= 0) {
System.arraycopy(intervals, 0, newIntervals, 0, start);
}

newIntervals[start] = new int[]{Math.min(intervals[start][0], newInterval[0]), Math.max(intervals[end][1], newInterval[1])};

if (intervals.length - (end + 1) >= 0) {
System.arraycopy(intervals, end + 1, newIntervals, end + 1 - (end - start), intervals.length - (end + 1));
}

return newIntervals;
}
}
```

#### TC, SC

์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” `O(n)` ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” `O(1)` ์ด๋‹ค. (๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ๋œ `int[][]`๋Š” ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š”๋‹ค.)

0 comments on commit 418c176

Please sign in to comment.