Skip to content

Commit

Permalink
feat : week11
Browse files Browse the repository at this point in the history
  • Loading branch information
imsosleepy committed Feb 22, 2025
1 parent 884ebec commit 6f3a0ea
Show file tree
Hide file tree
Showing 5 changed files with 163 additions and 0 deletions.
27 changes: 27 additions & 0 deletions binary-tree-level-order-traversal/imsosleepy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// dfs์™€ ๋ถ„ํ•  ์ •๋ณต๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ๋˜๋Š” ๋ฌธ์ œ
// dfs์ธ ๊ฒƒ์„ ์•Œ์•˜์œผ๋‚˜ ๋ชจ๋“  ์ˆซ์ž๊ฐ€ ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ๋ฅผ ํŒ๋ณ„ํ•˜์ง€ ๋ชปํ•ด GPT์—๊ฒŒ ๋„์›€์„ ์ฒ˜ํ•จ
class Solution {
private int maxSum = Integer.MIN_VALUE; // ์ „์ฒด ์ตœ๋Œ€ ๊ฒฝ๋กœ ํ•ฉ ์ €์žฅ

public int maxPathSum(TreeNode root) {
dfs(root);
return maxSum;
}

private int dfs(TreeNode node) {
if (node == null) return 0; // base case

// ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ๊ฒฝ๋กœ ํ•ฉ (์Œ์ˆ˜๋Š” ํฌํ•จ X โ†’ Math.max(0, value))
int left = Math.max(0, dfs(node.left));
int right = Math.max(0, dfs(node.right));

// ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•œ ์ตœ๋Œ€ ๊ฒฝ๋กœ (์™ผ์ชฝ + ๋ฃจํŠธ + ์˜ค๋ฅธ์ชฝ)
int pathSum = left + node.val + right;

// ์ตœ๋Œ€ ๊ฒฝ๋กœ ๊ฐ’ ๊ฐฑ์‹ 
maxSum = Math.max(maxSum, pathSum);

// โœ… ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ์ตœ๋Œ€ ๊ฒฝ๋กœ ๊ฐ’๋งŒ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ (์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ)
return node.val + Math.max(left, right);
}
}
34 changes: 34 additions & 0 deletions graph-valid-tree/imsosleepy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// ์ €๋ฒˆ์ฃผ course-schedule ๋ฌธ์ œ์™€ ์œ ์‚ฌํ•œ ์‚ฌ์ดํด์ด ์กด์žฌํ•˜์ง€ ์•Š์•„์•ผํ•˜๋Š” ํŠธ๋ฆฌ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ
// ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค๋ฉด course-schedule๋Š” ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์ง€๋งŒ ์ด ๋ฌธ์ œ๋Š” ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„๋ผ๋Š” ์ฐจ์ด๊ฐ€ ์žˆ์Œ
// ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„๋Š” ์ด์ „ ๋…ธ๋“œ(๋ถ€๋ชจ)๋ฅผ ํ†ตํ•ด ๋‹ค์‹œ ๋Œ์•„์˜จ ํ›„ ์—ฐ๊ฒฐ์„ ํŒ๋‹จํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์–ด๊ฑฐ ๊ตฌํ˜„์ด ์กฐ๊ธˆ ๋” ์–ด๋ ค์›€
public class GraphValidTree {
public boolean validTree(int n, int[][] edges) {
if (edges.length != n - 1) return false; // ํŠธ๋ฆฌ๋Š” ๋ฐ˜๋“œ์‹œ (n-1)๊ฐœ์˜ ๊ฐ„์„  ํ•„์š”

// ๊ทธ๋ž˜ํ”„ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
Map<Integer, List<Integer>> graph = new HashMap<>();
for (int i = 0; i < n; i++) {
graph.put(i, new ArrayList<>());
}
for (int[] edge : edges) {
graph.get(edge[0]).add(edge[1]);
graph.get(edge[1]).add(edge[0]);
}

Set<Integer> visited = new HashSet<>();
if (!dfs(graph, 0, -1, visited)) return false;

return visited.size() == n;
}

private boolean dfs(Map<Integer, List<Integer>> graph, int node, int parent, Set<Integer> visited) {
if (visited.contains(node)) return false; // ์‚ฌ์ดํด ๋ฐœ๊ฒฌ

visited.add(node);
for (int neighbor : graph.get(node)) {
if (neighbor == parent) continue;
if (!dfs(graph, neighbor, node, visited)) return false;
}
return true;
}
}
8 changes: 8 additions & 0 deletions maximum-depth-of-binary-tree/imsosleepy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// ํŠธ๋ฆฌ ํƒ์ƒ‰์€ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์ด ๊ณต๊ฐ„๋ณต์žก๋„๊ฐ€ ๋‚ฎ๋‹ค.
// ๋ชจ๋“  ๋…ธ๋“œ(๋ฆฌ์ŠคํŠธ)๋ฅผ O(N)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค.
class Solution {
public int maxDepth(TreeNode root) {
if (root == null) return 0;
return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
}
}
31 changes: 31 additions & 0 deletions merge-intervals/imsosleepy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// ์ •๋ ฌ์„ ํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด O(N^2)์ด ๊ฑธ๋ฆผ
// ์ •๋ ฌ์„ ๋‚˜๋ฉด ์•„๋ฌด๋ฆฌ ๋นจ๋ผ๋„ O(N log N)์ด์ง€๋งŒ ์ดํ›„์— ๋ฌธ์ œ๊ฐ€ ๊ฐ„๋‹จํ•ด์ง
// currentEnd >= nextStart โ†’ ๊ฒน์น˜๋ฉด end ๊ฐ’์„ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„
class Solution {
public int[][] merge(int[][] intervals) {
if (intervals.length <= 1) return intervals;

Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));

List<int[]> merged = new ArrayList<>();
int[] currentInterval = intervals[0];
merged.add(currentInterval);

for (int[] interval : intervals) {
int currentEnd = currentInterval[1];
int nextStart = interval[0];
int nextEnd = interval[1];

if (currentEnd >= nextStart) {
// ๊ฒน์น˜๋ฉด end ๊ฐ’์„ ์—…๋ฐ์ดํŠธ
currentInterval[1] = Math.max(currentEnd, nextEnd);
} else {
// ๊ฒน์น˜์ง€ ์•Š์œผ๋ฉด ์ƒˆ๋กœ์šด ๊ตฌ๊ฐ„์œผ๋กœ ์ถ”๊ฐ€
currentInterval = interval;
merged.add(currentInterval);
}
}

return merged.toArray(new int[merged.size()][]);
}
}
63 changes: 63 additions & 0 deletions reorder-list/imsosleepy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
// GPT์˜ ๋„์›€์„ ๋ฐ›์•„ ์กฐ๊ธˆ ๋” ๊ณต๊ฐ„๋ณต์žก๋„๊ฐ€ ๋‚ฎ๊ณ  ๋น ๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„
class Solution {
public void reorderList(ListNode head) {
if (head == null || head.next == null) return;

ListNode slow = head, fast = head;
while (fast != null && fast.next != null) {
slow = slow.next;
fast = fast.next.next;
}

ListNode second = reverse(slow.next);
slow.next = null;

ListNode first = head;
while (second != null) {
ListNode tmp1 = first.next;
ListNode tmp2 = second.next;

first.next = second;
second.next = tmp1;

first = tmp1;
second = tmp2;
}
}

private ListNode reverse(ListNode head) {
ListNode prev = null;
while (head != null) {
ListNode next = head.next;
head.next = prev;
prev = head;
head = next;
}
return prev;
}
}

// ์ฒซ๋ฒˆ์งธ ์ƒ๊ฐํ•œ ํ’€์ด๋ฐฉ์‹ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ฐ’์„ ๋„ฃ์–ด์„œ ์ฒ˜๋ฆฌํ•˜๋‹ˆ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(N)์œผ๋กœ ์ด๋ก ์ƒ ๊ฐ™์œผ๋‚˜
// ์†๋„๋ผ ํ‰๊ท ์†๋„๋ณด๋‹ค ํ˜„์ €ํ•˜๊ฒŒ ๋‚ฎ๊ฒŒ๋‚˜์˜จ๋‹ค.
class Solution {
public void reorderList(ListNode head) {
if (head == null || head.next == null) return;

List<ListNode> list = new ArrayList<>();
ListNode temp = head;
while (temp != null) {
list.add(temp);
temp = temp.next;
}

int i = 0, j = list.size() - 1;
while (i < j) {
list.get(i).next = list.get(j);
i++;
if (i == j) break;
list.get(j).next = list.get(i);
j--;
}
list.get(i).next = null;
}
}

0 comments on commit 6f3a0ea

Please sign in to comment.