Skip to content

Commit c94cd08

Browse files
authored
Merge pull request #1066 from imsosleepy/main
[Ackku] week 12
2 parents 622169f + 35ce7fc commit c94cd08

File tree

5 files changed

+179
-0
lines changed

5 files changed

+179
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// ์ •๋ ฌ์„ ํ•˜์ง€ ์•Š์œผ๋ฉด O(N^2)์ด ํ™•์ •์ธ ๋ฌธ์ œ
2+
// ์ •๋ ฌ์„ ํ•ด์„œ O(NlogN)์œผ๋กœ ํ•ด๊ฒฐ
3+
class Solution {
4+
public int eraseOverlapIntervals(int[][] intervals) {
5+
if (intervals.length == 0) return 0;
6+
7+
Arrays.sort(intervals, (a, b) -> a[1] - b[1]);
8+
9+
int count = 0;
10+
int prevEnd = intervals[0][1];
11+
12+
for (int i = 1; i < intervals.length; i++) {
13+
if (intervals[i][0] < prevEnd) {
14+
count++;
15+
} else {
16+
prevEnd = intervals[i][1];
17+
}
18+
}
19+
return count;
20+
}
21+
}
22+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// ๊ทธ๋ž˜ํ”„์—์„œ ์—ฐ๊ฒฐ๋œ ์ปดํฌ๋„ŒํŠธ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ
2+
// ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ€ํ™˜, DFS๋กœ ์—ฐ๊ฒฐ์„ ํ™•์ธํ•œ๋‹ค
3+
// ๊ทธ๋ž˜ํ”„ ๋ณ€ํ™˜ โ†’ O(E) (๊ฐ„์„  ์ˆ˜), DFS/BFS ํƒ์ƒ‰ โ†’ O(V + E) (๋…ธ๋“œ + ๊ฐ„์„ )
4+
class Solution {
5+
public int countComponents(int n, int[][] edges) {
6+
List<List<Integer>> graph = new ArrayList<>();
7+
for (int i = 0; i < n; i++) {
8+
graph.add(new ArrayList<>());
9+
}
10+
11+
for (int[] edge : edges) {
12+
graph.get(edge[0]).add(edge[1]);
13+
graph.get(edge[1]).add(edge[0]);
14+
}
15+
16+
boolean[] visited = new boolean[n];
17+
int count = 0;
18+
for (int i = 0; i < n; i++) {
19+
if (!visited[i]) {
20+
dfs(i, graph, visited);
21+
count++;
22+
}
23+
}
24+
return count;
25+
}
26+
27+
private void dfs(int node, List<List<Integer>> graph, boolean[] visited) {
28+
if (visited[node]) return;
29+
visited[node] = true;
30+
for (int neighbor : graph.get(node)) {
31+
dfs(neighbor, graph, visited);
32+
}
33+
}
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// ๋…ธ๋“œ ์ „์ฒด๋ฅผ ํ•œ๋ฒˆ๋งŒ ํƒ์ƒ‰ํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ์Œ ๋”ฐ๋ผ์„œ O(N)
2+
// ํˆฌํฌ์ธํ„ฐ ๋ฐฉ์‹์œผ๋กœ ํ•˜๋‚˜๋ฅผ N+1 ์œ„์น˜๋กœ ๋ณด๋‚ด์„œ N๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•œ ํ›„ oneStep๊ณผ ์—ฐ๊ฒฐํ•œ๋‹ค.
3+
// oneStep์€ ์‚ญ์ œํ•  ๋…ธ๋“œ ๋ฐ”๋กœ ์ง์ „ ๋…ธ๋“œ
4+
// ์‚ฌ์ด์ฆˆ๊ฐ€ 1์ผ ๋•Œ๋ฅผ ๋ฒ”์šฉ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋จธ๋ฆฌ๋ฅผ ๊ตด๋ ธ์Œ...
5+
class Solution {
6+
public ListNode removeNthFromEnd(ListNode head, int n) {
7+
ListNode defaultNode = new ListNode(0);
8+
defaultNode.next = head;
9+
ListNode twoStep = defaultNode;
10+
ListNode oneStep = defaultNode;
11+
12+
for (int i = 0; i <= n; i++) {
13+
twoStep = twoStep.next;
14+
}
15+
16+
while (twoStep != null) {
17+
twoStep = twoStep.next;
18+
oneStep = oneStep.next;
19+
}
20+
21+
oneStep.next = oneStep.next.next;
22+
23+
return defaultNode.next;
24+
}
25+
}

โ€Žsame-tree/imsosleepy.java

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution {
2+
public boolean isSameTree(TreeNode p, TreeNode q) {
3+
// ๋๊นŒ์ง€ ๋‚ด๋ ค์™”์œผ๋ฉด ๊ฐ™๋‹ค.
4+
if (p == null && q == null) return true;
5+
// ๋๊นŒ์ง€ ๋‚ด๋ ค์™”๋Š”๋ฐ, ๊ฐ’์ด ๋‹ค๋ฅด๋‹ค.
6+
if (p == null || q == null || p.val != q.val) return false;
7+
// ์–‘์ชฝ ๋‹ค ํƒ์ƒ‰
8+
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
9+
}
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
// ๋ฌธ์ œ ํ•ด์„ ๋ถ€ํ„ฐ ์•ˆ๋˜์„œ GPT์—๊ฒŒ ๋„์›€์„ ์š”์ฒญ
2+
// Serialize (์ง๋ ฌํ™”): ํŠธ๋ฆฌ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •.
3+
// Deserialize (์—ญ์ง๋ ฌํ™”): ๋ฌธ์ž์—ด์„ ๋‹ค์‹œ ํŠธ๋ฆฌ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •.
4+
// ํŠธ๋ฆฌ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ณต์›ํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•์‹์ด๋ผ๋ฉด ์–ด๋–ค ๋ฐฉ๋ฒ•์ด๋“  ๊ฐ€๋Šฅ.
5+
// ๐Ÿ”น ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
6+
// ์šฐ๋ฆฌ๋Š” BFS(๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰)์™€ ํ(Queue)๋ฅผ ํ™œ์šฉํ•œ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ๊ฑฐ์•ผ.
7+
// ์ด ๋ฐฉ์‹์„ ์„ ํƒํ•œ ์ด์œ ๋Š”:
8+
9+
// ํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ์ง๋ ฌํ™”ํ•˜๊ธฐ ์‰ฝ๋‹ค.
10+
// ๋ฌธ์ž์—ด์ด ์ˆœ์ฐจ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ ธ ์—ญ์ง๋ ฌํ™”ํ•  ๋•Œ๋„ ๋‹ค์‹œ ์ˆœ์ฐจ์ ์œผ๋กœ ํŠธ๋ฆฌ๋ฅผ ๋ณต์›ํ•˜๊ธฐ ํŽธํ•˜๋‹ค.
11+
public class Codec {
12+
13+
// ์ง๋ ฌํ™” (Serialize)
14+
public String serialize(TreeNode root) {
15+
if (root == null) return "null"; // ๋นˆ ํŠธ๋ฆฌ ์ฒ˜๋ฆฌ
16+
17+
StringBuilder sb = new StringBuilder();
18+
Queue<TreeNode> queue = new LinkedList<>();
19+
queue.offer(root);
20+
21+
while (!queue.isEmpty()) {
22+
TreeNode node = queue.poll();
23+
24+
if (node == null) {
25+
sb.append("null,");
26+
} else {
27+
sb.append(node.val).append(",");
28+
queue.offer(node.left);
29+
queue.offer(node.right);
30+
}
31+
}
32+
return sb.toString();
33+
}
34+
35+
// ์—ญ์ง๋ ฌํ™” (Deserialize)
36+
public TreeNode deserialize(String data) {
37+
if (data.equals("null")) return null; // ๋นˆ ํŠธ๋ฆฌ ์ฒ˜๋ฆฌ
38+
39+
String[] values = data.split(",");
40+
TreeNode root = new TreeNode(Integer.parseInt(values[0]));
41+
Queue<TreeNode> queue = new LinkedList<>();
42+
queue.offer(root);
43+
44+
int i = 1;
45+
while (!queue.isEmpty()) {
46+
TreeNode node = queue.poll();
47+
48+
if (!values[i].equals("null")) {
49+
node.left = new TreeNode(Integer.parseInt(values[i]));
50+
queue.offer(node.left);
51+
}
52+
i++;
53+
54+
if (!values[i].equals("null")) {
55+
node.right = new TreeNode(Integer.parseInt(values[i]));
56+
queue.offer(node.right);
57+
}
58+
i++;
59+
}
60+
return root;
61+
}
62+
}
63+
64+
// ํŠธ๋ฆฌ๋Š” ๋Œ€๋ถ€๋ถ„ DFS๋กœ ํ•ด๊ฒฐํ–ˆ์–ด์„œ ๋น„์Šทํ•œ ๋ฐฉ์‹์„ ์ƒ๊ฐํ–ˆ์œผ๋‚˜ ๊ตฌํ˜„ ์‹คํŒจ
65+
// GPT์—๊ฒŒ ์ด์–ด์„œ ์ž‘์—…์„ ํ–ˆ๊ณ  O(N)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์–ป์Œ. ๊ทธ๋Ÿฌ๋‚˜ ์œ„์˜ BFS๋ณด๋‹ค ์†๋„๊ฐ€ ๋А๋ฆผ
66+
class Codec {
67+
// ๐Ÿ”น DFS ๊ธฐ๋ฐ˜ ์ง๋ ฌํ™” (Serialize)
68+
public String serialize(TreeNode root) {
69+
if (root == null) return "null";
70+
return root.val + "," + serialize(root.left) + "," + serialize(root.right);
71+
}
72+
73+
// ๐Ÿ”น DFS ๊ธฐ๋ฐ˜ ์—ญ์ง๋ ฌํ™” (Deserialize)
74+
public TreeNode deserialize(String data) {
75+
Queue<String> nodes = new LinkedList<>(Arrays.asList(data.split(",")));
76+
return buildTree(nodes);
77+
}
78+
79+
private TreeNode buildTree(Queue<String> nodes) {
80+
String val = nodes.poll();
81+
if (val.equals("null")) return null;
82+
83+
TreeNode node = new TreeNode(Integer.parseInt(val));
84+
node.left = buildTree(nodes);
85+
node.right = buildTree(nodes);
86+
return node;
87+
}
88+
}

0 commit comments

Comments
ย (0)