Skip to content

Commit f29f2b2

Browse files
authored
Merge pull request #198 from dev-jonghoonpark/main
2 parents cdc550f + d1b731f commit f29f2b2

File tree

5 files changed

+251
-0
lines changed

5 files changed

+251
-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[][]`๋Š” ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š”๋‹ค.)
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
- ๋ฌธ์ œ
2+
- ์œ ๋ฃŒ: https://leetcode.com/problems/meeting-rooms-ii/
3+
- ๋ฌด๋ฃŒ: https://www.lintcode.com/problem/919/
4+
- ํ’€์ด: https://algorithm.jonghoonpark.com/2024/07/22/leetcode-253
5+
6+
```java
7+
public class Solution {
8+
public int minMeetingRooms(List<Interval> intervals) {
9+
intervals = intervals.stream().sorted(Comparator.comparingInt(o -> o.start)).toList();
10+
11+
List<List<Interval>> days = new ArrayList<>();
12+
13+
for(Interval interval : intervals) {
14+
boolean added = false;
15+
for (List<Interval> day : days) {
16+
day.add(interval);
17+
if (canAttendMeetings(day)) {
18+
added = true;
19+
break;
20+
}
21+
day.remove(day.size() - 1);
22+
}
23+
24+
if(!added) {
25+
List<Interval> newDay = new ArrayList<>();
26+
newDay.add(interval);
27+
days.add(newDay);
28+
}
29+
}
30+
31+
return days.size();
32+
}
33+
34+
public boolean canAttendMeetings(List<Interval> intervals) {
35+
for (int i = 0; i < intervals.size() - 1; i++) {
36+
if(intervals.get(i).end > intervals.get(i+1).start) {
37+
return false;
38+
}
39+
}
40+
return true;
41+
}
42+
}
43+
44+
class Interval {
45+
public int start, end;
46+
47+
public Interval(int start, int end) {
48+
this.start = start;
49+
this.end = end;
50+
}
51+
52+
@Override
53+
public String toString() {
54+
return "{" + start + ", " + end + "}";
55+
}
56+
}
57+
```
58+
59+
### TC, SC
60+
61+
days์˜ ๊ธธ์ด๋ฅผ m ์ด๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” `O(n^2 * m)` ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” `O(n)` ์ด๋‹ค. m์€ ์ตœ์•…์˜ ๊ฒฝ์šฐ n์ด ๋  ์ˆ˜ ์žˆ๋‹ค.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
- ๋ฌธ์ œ: https://leetcode.com/problems/merge-intervals/
2+
- ํ’€์ด: https://algorithm.jonghoonpark.com/2024/07/23/leetcode-56
3+
4+
```java
5+
class Solution {
6+
public int[][] merge(int[][] intervals) {
7+
Arrays.sort(intervals, Comparator.comparingInt(o -> o[0]));
8+
9+
Deque<int[]> intervalDeque = new ArrayDeque<>();
10+
intervalDeque.add(intervals[0]);
11+
for(int i = 1; i < intervals.length; i++) {
12+
int[] lastElement = intervalDeque.getLast();
13+
int[] nextElement = intervals[i];
14+
15+
if (lastElement[1] >= nextElement[0]) {
16+
int[] mergedElement = new int[]{
17+
lastElement[0],
18+
Math.max(lastElement[1], nextElement[1])
19+
};
20+
intervalDeque.removeLast();
21+
intervalDeque.add(mergedElement);
22+
} else {
23+
intervalDeque.add(nextElement);
24+
}
25+
}
26+
27+
return intervalDeque.toArray(int[][]::new);
28+
}
29+
}
30+
```
31+
32+
### TC, SC
33+
34+
์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” `O(n*logn)` ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” `O(n)` ์ด๋‹ค. (๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ๋œ `int[][]`๋Š” ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š”๋‹ค.)
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
- ๋ฌธ์ œ: https://leetcode.com/problems/non-overlapping-intervals/
2+
- ํ’€์ด: https://algorithm.jonghoonpark.com/2024/07/23/leetcode-435
3+
4+
```java
5+
public int eraseOverlapIntervals(int[][] intervals) {
6+
int overlappingCount = 0;
7+
Arrays.sort(intervals, Comparator.comparingInt(o -> o[1]));
8+
9+
int currentEnd = intervals[0][1];
10+
for (int i = 0; i < intervals.length - 1; i++) {
11+
// overlapping ์ด ๋ฐœ์ƒ๋œ ๊ฒฝ์šฐ
12+
if (currentEnd > intervals[i + 1][0]) {
13+
overlappingCount++;
14+
15+
// ์•ž interval ์˜ end ๊ฐ’์ด ๋’ค interval ์˜ end ๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ ์ด์ „ pointer ์œ ์ง€
16+
if (currentEnd < intervals[i + 1][1]) {
17+
continue;
18+
}
19+
}
20+
21+
currentEnd = intervals[i + 1][1];
22+
}
23+
24+
return overlappingCount;
25+
}
26+
```
27+
28+
### TC, SC
29+
30+
์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” `O(n*logn)` ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” `O(1)` ์ด๋‹ค.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
- ๋ฌธ์ œ: https://leetcode.com/problems/rotate-image/
2+
- ํ’€์ด: https://algorithm.jonghoonpark.com/2024/07/22/leetcode-48
3+
4+
```java
5+
class Solution {
6+
public void rotate(int[][] matrix) {
7+
int l = matrix.length;
8+
9+
int limit = (int) Math.ceil((double) l / 2);
10+
for (int i = 0; i < limit; i++) {
11+
for (int j = i; j < l - 1 - i; j++) {
12+
int temp = matrix[i][j];
13+
matrix[i][j] = matrix[l - j - 1][i];
14+
matrix[l - j - 1][i] = matrix[l - i - 1][l - j - 1];
15+
matrix[l - i - 1][l - j - 1] = matrix[j][l - i - 1];
16+
matrix[j][l - i - 1] = temp;
17+
}
18+
}
19+
}
20+
}
21+
```
22+
23+
### TC, SC
24+
25+
์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” `O(n^2)` ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” `O(1)` ์ด๋‹ค.

0 commit comments

Comments
ย (0)