Skip to content

Commit d61045d

Browse files
authored
Merge pull request #1594 from Tessa1217/main
[Tessa1217] Week 12 Solutions
2 parents 1d76cbb + 4c5f474 commit d61045d

File tree

5 files changed

+202
-0
lines changed

5 files changed

+202
-0
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import java.util.Arrays;
2+
3+
class Solution {
4+
public int eraseOverlapIntervals(int[][] intervals) {
5+
6+
// 끝점 기준 정렬
7+
Arrays.sort(intervals, (o1, o2) -> Integer.compare(o1[1], o2[1]));
8+
9+
int overlap = 0;
10+
11+
int end = intervals[0][1];
12+
13+
for (int i = 1; i < intervals.length; i++) {
14+
int currentStart = intervals[i][0];
15+
int currentEnd = intervals[i][1];
16+
17+
if (currentStart < end) {
18+
overlap++;
19+
} else {
20+
end = currentEnd;
21+
}
22+
23+
}
24+
25+
return overlap;
26+
}
27+
}
28+
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import java.util.*;
2+
3+
public class Solution {
4+
5+
// Union Find
6+
public int countComponents(int n, int[][] edges) {
7+
8+
List<Integer> parent = clearGraph(n);
9+
10+
for (int[] edge : edges) {
11+
union(parent, edge[0], edge[1]);
12+
}
13+
14+
Set<Integer> componentRoots = new HashSet<>();
15+
for (int i = 0; i < n; i++) {
16+
componentRoots.add(find(parent, i));
17+
}
18+
19+
return componentRoots.size();
20+
}
21+
22+
private void union(List<Integer> parent, int x, int y) {
23+
int px = find(parent, x);
24+
int py = find(parent, y);
25+
if (px > py) {
26+
parent.set(py, px);
27+
} else {
28+
parent.set(px, py);
29+
}
30+
}
31+
32+
private int find(List<Integer> parent, int x) {
33+
if (parent.get(x) == x) {
34+
return x;
35+
}
36+
parent.set(x, find(parent, parent.get(x)));
37+
return parent.get(x);
38+
}
39+
40+
private List<Integer> clearGraph(int n) {
41+
List<Integer> parent = new ArrayList<>();
42+
for (int i = 0; i < n; i++) {
43+
parent.add(i);
44+
}
45+
return parent;
46+
}
47+
}
48+
49+
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* public class ListNode {
4+
* int val;
5+
* ListNode next;
6+
* ListNode() {}
7+
* ListNode(int val) { this.val = val; }
8+
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
9+
* }
10+
*/
11+
class Solution {
12+
public ListNode removeNthFromEnd(ListNode head, int n) {
13+
14+
// length 1인 경우를 위해 temp 생성
15+
ListNode temp = new ListNode(0);
16+
temp.next = head;
17+
18+
// 투 포인터 선언
19+
ListNode fast = temp;
20+
ListNode slow = temp;
21+
22+
// n + 1칸만큼 fast 먼저 이동
23+
for (int i = 0; i < n + 1; i++) {
24+
fast = fast.next;
25+
}
26+
27+
while (fast != null) {
28+
fast = fast.next;
29+
// 끊어지는 노드 바로 앞까지 이동
30+
slow = slow.next;
31+
}
32+
33+
// slow.next = 끊어져서 치환해야 하는 위치
34+
slow.next = slow.next.next;
35+
36+
return temp.next;
37+
}
38+
}
39+

same-tree/Tessa1217.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* public class TreeNode {
4+
* int val;
5+
* TreeNode left;
6+
* TreeNode right;
7+
* TreeNode() {}
8+
* TreeNode(int val) { this.val = val; }
9+
* TreeNode(int val, TreeNode left, TreeNode right) {
10+
* this.val = val;
11+
* this.left = left;
12+
* this.right = right;
13+
* }
14+
* }
15+
*/
16+
class Solution {
17+
18+
// 현재 노드 검사 후 좌우 검사
19+
public boolean isSameTree(TreeNode p, TreeNode q) {
20+
if (p == null && q == null) return true;
21+
if (p == null || q == null) return false;
22+
if (p.val != q.val) return false;
23+
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
24+
}
25+
}
26+
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import java.util.Arrays;
2+
import java.util.LinkedList;
3+
import java.util.Queue;
4+
5+
/**
6+
* Definition for a binary tree node.
7+
* public class TreeNode {
8+
* int val;
9+
* TreeNode left;
10+
* TreeNode right;
11+
* TreeNode(int x) { val = x; }
12+
* }
13+
*/
14+
public class Codec {
15+
16+
private StringBuilder sb = new StringBuilder();
17+
18+
// Encodes a tree to a single string.
19+
public String serialize(TreeNode root) {
20+
serializeNode(root);
21+
return sb.toString();
22+
}
23+
24+
private void serializeNode(TreeNode node) {
25+
// null인 경우 구분 위해 null 문자열 삽입
26+
if (node == null) {
27+
sb.append("null,");
28+
return;
29+
}
30+
sb.append(node.val).append(",");
31+
serializeNode(node.left);
32+
serializeNode(node.right);
33+
}
34+
35+
// Decodes your encoded data to tree.
36+
public TreeNode deserialize(String data) {
37+
String[] dataArr = data.split(",");
38+
Queue<String> queue = new LinkedList<>(Arrays.asList(dataArr));
39+
return buildTree(queue);
40+
}
41+
42+
private TreeNode buildTree(Queue<String> queue) {
43+
String val = queue.poll();
44+
if (val.equals("null")) {
45+
return null;
46+
}
47+
TreeNode node = new TreeNode(Integer.parseInt(val));
48+
node.left = buildTree(queue);
49+
node.right = buildTree(queue);
50+
51+
return node;
52+
53+
}
54+
}
55+
56+
// Your Codec object will be instantiated and called as such:
57+
// Codec ser = new Codec();
58+
// Codec deser = new Codec();
59+
// TreeNode ans = deser.deserialize(ser.serialize(root));
60+

0 commit comments

Comments
 (0)