Skip to content

Commit d4581c7

Browse files
authored
Merge pull request #1083 from imsosleepy/main
[Ackku] Week 13
2 parents 2b86017 + 0232e2b commit d4581c7

File tree

5 files changed

+155
-0
lines changed

5 files changed

+155
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// ๋ฉ”๋ชจ๋ฆฌ์ดˆ๊ณผ๋กœ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ์€ ์ €์žฅ ๊ณต๊ฐ„์ด ์—ฌ๋Ÿฌ๊ฐœ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฑฐ ์˜€๋‹ค.
2+
// ๊ทธ๋ฆฌ๊ณ  ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋˜์ง€ ์•Š์•„์„œ ๋ฌด์กฐ๊ฑด nlog(n) ์ด์ƒ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์—
3+
// ์ž๋™ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋Š” ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๊ฒ ๋”ฐ๊ณ  ์ƒ๊ฐ
4+
// ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜๋ˆ„๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ•„์š”ํ•œ์ง€ ๋ชจ๋ฅด๊ณ  ํ—ค๋ฉ”๋‹ค๊ฐ€ GPT ๋‹ต์„ ๋ณด๊ฒŒ๋จ
5+
// ์‹œ๊ฐ„๋ณต์žก๋„ ์šฐ์„ ์ˆœ์œ„ ํ : O(logN)
6+
class MedianFinder {
7+
private PriorityQueue<Integer> maxHeap;
8+
private PriorityQueue<Integer> minHeap;
9+
10+
public MedianFinder() {
11+
maxHeap = new PriorityQueue<>(Collections.reverseOrder());
12+
minHeap = new PriorityQueue<>();
13+
}
14+
15+
public void addNum(int num) {
16+
maxHeap.offer(num);
17+
18+
if (!minHeap.isEmpty() && maxHeap.peek() > minHeap.peek()) {
19+
minHeap.offer(maxHeap.poll());
20+
}
21+
22+
if (maxHeap.size() > minHeap.size() + 1) {
23+
minHeap.offer(maxHeap.poll());
24+
} else if (minHeap.size() > maxHeap.size()) {
25+
maxHeap.offer(minHeap.poll());
26+
}
27+
}
28+
29+
public double findMedian() {
30+
if (maxHeap.size() > minHeap.size()) {
31+
return maxHeap.peek();
32+
} else {
33+
return (maxHeap.peek() + minHeap.peek()) / 2.0;
34+
}
35+
}
36+
}
37+
38+
// ๋ฉ”๋ชจ๋ฆฌ์ดˆ๊ณผ
39+
class MedianFinder {
40+
private List<Integer> arr;
41+
42+
public MedianFinder() {
43+
arr = new ArrayList<>();
44+
}
45+
46+
public void addNum(int num) {
47+
arr.add(num);
48+
}
49+
50+
public double findMedian() {
51+
Collections.sort(arr);
52+
53+
int size = arr.size();
54+
if (size % 2 == 1) {
55+
return arr.get(size / 2);
56+
} else {
57+
return (arr.get(size / 2 - 1) + arr.get(size / 2)) / 2.0;
58+
}
59+
}
60+
}

โ€Žinsert-interval/imsosleepy.java

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// start์™€ end๋ผ๋Š” ๋‘๊ฐœ์˜ ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ํ•œ๋ฒˆ๋งŒ ์ˆœํšŒํ•ด๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
2+
// ์กฐ๊ฑด์ด ์„ธ๊ฐœ ๋ฐ–์— ์—†์–ด์„œ ๋‹จ์ˆœํ•˜๊ฒŒ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ•˜๋ฉด๋œ๋‹ค.
3+
// (1) ํ˜„์žฌ ๊ตฌ๊ฐ„์ด newInterval๋ณด๋‹ค ์•ž์— ์žˆ์Œ โ†’ ๊ทธ๋Œ€๋กœ ์ถ”๊ฐ€
4+
// (2) ํ˜„์žฌ ๊ตฌ๊ฐ„์ด newInterval๋ณด๋‹ค ๋’ค์— ์žˆ์Œ โ†’ ๋ณ‘ํ•ฉํ•  ํ•„์š” ์—†์Œ, ๋ฐ”๋กœ ์ถ”๊ฐ€
5+
// (3) ๊ฒน์น˜๋Š” ๊ฒฝ์šฐ ๋ณ‘ํ•ฉ
6+
// ๋งˆ์ง€๋ง‰ newInterval ์ถ”๊ฐ€ (๋ณ‘ํ•ฉ๋œ ์ƒํƒœ์ผ ์ˆ˜๋„ ์žˆ์Œ) << ์ด๊ฑธ ๋ชป์ฐพ์•„์„œ ๋„ˆ๋ฌด ์˜ค๋ž˜๊ฑธ๋ฆผ
7+
// ์‹œ๊ฐ„๋ณต์žก๋„ O(N)
8+
class Solution {
9+
public int[][] insert(int[][] intervals, int[] newInterval) {
10+
List<int[]> result = new ArrayList<>();
11+
int n = intervals.length;
12+
int start = newInterval[0];
13+
int end = newInterval[1];
14+
15+
for (int i = 0; i < n; i++) {
16+
17+
if (intervals[i][1] < start) {
18+
result.add(intervals[i]);
19+
}
20+
21+
else if (intervals[i][0] > end) {
22+
result.add(new int[]{start, end});
23+
start = intervals[i][0]; // ๊ธฐ์กด ๊ตฌ๊ฐ„๋ถ€ํ„ฐ ๋‹ค์‹œ ์ถ”๊ฐ€
24+
end = intervals[i][1];
25+
}
26+
27+
else {
28+
start = Math.min(start, intervals[i][0]);
29+
end = Math.max(end, intervals[i][1]);
30+
}
31+
}
32+
33+
result.add(new int[]{start, end});
34+
35+
return result.toArray(new int[result.size()][]);
36+
}
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// ์ค‘์œ„ ์ˆœํšŒ๋กœ ๋งจ์•„๋ž˜๊นŒ์ง€ ๋‚ด๋ ค๊ฐ€์„œ ์ˆœ์„œ๋ฅผ ์ฐพ๋Š”๋‹ค.
2+
// ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ํƒ์ƒ‰ํ•  ๋ฐฉ๋ฒ•์„ ๋ชฐ๋ผ์„œ GPT๋กœ ์ฐพ์•„๋ดค์Œ.
3+
// ํ•œ๋ฒˆ๋งŒ ํƒ์ƒ‰ํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(N)
4+
class Solution {
5+
int count = 0;
6+
int result = 0;
7+
8+
public int kthSmallest(TreeNode root, int k) {
9+
inorder(root, k);
10+
return result;
11+
}
12+
13+
private void inorder(TreeNode node, int k) {
14+
if (node == null) return;
15+
16+
inorder(node.left, k);
17+
18+
count++;
19+
if (count == k) {
20+
result = node.val;
21+
return;
22+
}
23+
24+
inorder(node.right, k);
25+
}
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// ๋ฐฑํŠธ๋ž˜ํ‚น์œผ๋กœ ๋งŒ๋“ค๋ ค๋‹ค while๋ฌธ์œผ๋กœ ์ „ํ™˜
2+
// ๋ฌธ์ œ๋งŒ ๋ด์„  ์•„๋ž˜์—์„œ ์œ„๋กœ ๊ฐ€๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ, ์ด์ง„ ํŠธ๋ฆฌ์˜ ํŠน์„ฑ ์ƒ ๋ฃจํŠธ๋ณด๋‹ค ์ž‘์œผ๋ฉด ์™ผ์ชฝ, ํฌ๋ฉด ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฐ€๋ฉด์„œ
3+
// ์ฃผ์–ด ์ง„ ์ˆ˜์ธ p,q ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. p๊ฐ€ q๋ณด๋‹ค ํด ์ˆ˜ ๋„ ์žˆ๋‹ค.
4+
// ํ•œ๋ฒˆ๋งŒ ์ˆœํšŒํ•˜๋ฏ€๋กœ O(N)
5+
class Solution {
6+
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
7+
while (root != null) {
8+
if (root.val > p.val && root.val > q.val) {
9+
root = root.left; // ์™ผ์ชฝ์œผ๋กœ ์ด๋™
10+
} else if (root.val < p.val && root.val < q.val) {
11+
root = root.right; // ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™
12+
} else {
13+
return root;
14+
}
15+
}
16+
return null;
17+
}
18+
}

โ€Žmeeting-rooms/imsosleepy.java

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// ์ •๋ ฌ์„ ํ•˜์ง€์•Š์œผ๋ฉด O(N^2), ์ •๋ ฌ์„ ํ•˜๋ฉด ์ตœ๋Œ€ O(nlogn) ๋‚ด์—์„œ ํ•ด๊ฒฐ์ด ๋œ๋‹ค.
2+
// ๊ทธ๋ž˜์„œ ์ •๋ ฌ ํ›„ ๊ฒน์น˜๋Š”์ง€ ์กฐํšŒํ•˜๋Š” ๋ฐฉ์‹
3+
public static boolean canAttendMeetings(int[][] intervals) {
4+
if (intervals == null || intervals.length == 0) return true;
5+
6+
Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));
7+
8+
for (int i = 1; i < intervals.length; i++) {
9+
if (intervals[i - 1][1] > intervals[i][0]) {
10+
return false;
11+
}
12+
}
13+
return true;
14+
}

0 commit comments

Comments
ย (0)