Skip to content

Commit

Permalink
Merge pull request #1027 from imsosleepy/main
Browse files Browse the repository at this point in the history
[Ackku] week 10
  • Loading branch information
SamTheKorean authored Feb 16, 2025
2 parents bf00cab + 884ebec commit 687e199
Show file tree
Hide file tree
Showing 5 changed files with 135 additions and 0 deletions.
40 changes: 40 additions & 0 deletions course-schedule/imsosleepy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
// ์‚ฌ์ดํด์„ ์ฐพ๋Š” ๋ฌธ์ œ. DFS๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐฉ๋ฌธํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ฒดํฌํ•˜๋ฉด๋œ๋‹ค.
// DFS๋ฅผ ์ง„ํ–‰ ์ค‘์ธ ๊ฒƒ์„ ๋“ค๊ณ  ์žˆ์–ด์•ผ ์‚ฌ์ดํด ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.
// ๊ฐ„์„  ์ˆ˜์™€ ๋…ธ๋“œ์˜ ์ˆ˜์— ๋”ฐ๋ผ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๊ฒฐ์ •๋จ O(N+L)
class Solution {
public boolean canFinish(int numCourses, int[][] prerequisites) {
List<List<Integer>> graph = new ArrayList<>();
for (int i = 0; i < numCourses; i++) {
graph.add(new ArrayList<>());
}

for (int[] pair : prerequisites) {
graph.get(pair[1]).add(pair[0]);
}

// 0: ๋ฐฉ๋ฌธ X
// -1: DFS ์ง„ํ–‰ ์ค‘
// 1: ๋ฐฉ๋ฌธ ์™„๋ฃŒ
int[] visited = new int[numCourses];

// ๋ชจ๋“  ๋…ธ๋“œ์—์„œ DFS ์ˆ˜ํ–‰
for (int i = 0; i < numCourses; i++) {
if (dfs(graph, visited, i)) return false;
}

return true;
}

private boolean dfs(List<List<Integer>> graph, int[] visited, int node) {
if (visited[node] == -1) return true; // ๋ฐฉ๋ฌธ ์ค‘์ด๋ฉด ์‚ฌ์ดํด์ด ๋ฐœ๊ฒฌ
if (visited[node] == 1) return false;

visited[node] = -1; // ์ง„ํ–‰ ์ค‘ ํ‘œ๊ธฐ
for (int next : graph.get(node)) {
if (dfs(graph, visited, next)) return true;
}
visited[node] = 1;

return false;
}
}
13 changes: 13 additions & 0 deletions invert-binary-tree/imsosleepy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// ํŠธ๋ฆฌ์˜ ํ˜•ํƒœ๋ฅผ ๋ฐ”๊พธ๋Š”๊ฑด ๋Œ€๋ถ€๋ถ„ DFS๋กœ ํ‘ธ๋Š”๊ฒŒ ๊ณต๊ฐ„๋ณต์žก๋„ ์ธก๋ฉด์—์„œ ์œ ๋ฆฌํ•˜๋‹ค.
// BFS๋กœ๋„ ํ’€์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, BFS๋Š” ๋Œ€๋ถ€๋ถ„ ํ๋ฅผ ์ด์šฉํ•ด์„œ ๊ณต๊ฐ„๋ณต์žก๋„๊ฐ€ ๋†’์•„์ง„๋‹ค.
class Solution {
public TreeNode invertTree(TreeNode root) {
if (root == null) return null;

TreeNode temp = root.left;
root.left = invertTree(root.right);
root.right = invertTree(temp);

return root;
}
}
20 changes: 20 additions & 0 deletions jump-game/imsosleepy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// ํ˜„์žฌ ์œ„์น˜์—์„œ ์ตœ๋Œ€๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ธ๋ฑ์Šค์˜ ์ด๋ ฅ์„ ๊ฐฑ์‹ ํ•˜๋ฉด์„œ ์ตœ๋Œ€ ๋ฒ”์œ„๋ฅผ ๋„˜์ง€ ์•Š์•˜๋‚˜๋ฅผ ๊ณ„์† ํŒ๋ณ„ํ•˜๋ฉด ๋จ
// ์ฒ˜์Œ์—” DP์ธ์ค„ ์•Œ์•˜๋Š”๋ฐ DP ๋ฐฐ์—ด ์—†์ด ๊ทธ๋ƒฅ ํ’€๋ฆผ
class Solution {
public boolean canJump(int[] nums) {
int maxReach = 0;

for (int i = 0; i < nums.length; i++) {
if (i > maxReach) {
return false;
}

maxReach = Math.max(maxReach, i + nums[i]);
if (maxReach >= nums.length - 1) {
return true;
}
}

return true;
}
}
27 changes: 27 additions & 0 deletions merge-k-sorted-lists/imsosleepy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// ์šฐ์„ ์ˆœ์œ„ ํ๋กœ ๋‹ค ํ•ฉ์ณ๋ฒ„๋ฆฐ ๋‹ค์Œ์—
// ํ๋ฅผ ์ˆœํšŒ๋Œ๋ฉด์„œ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ์žฌ์ƒ์„ฑํ•œ๋‹ค. ์„ฑ๋Šฅ์€ ๋น„๊ต์  ๋‚ฎ๊ฒŒ ์žกํž˜
// ๋ถ„ํ•  ์ •๋ณต๋ฒ•์œผ๋กœ ํ’€๋ฉด ๋” ์ข‹์€ ์„ฑ๋Šฅ์ด ๋‚˜์˜จ๋‹ค๊ณ  ํ•œ๋‹ค.
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
PriorityQueue<ListNode> pq = new PriorityQueue<>((a, b) -> a.val - b.val);

for (ListNode node : lists) {
if (node != null) pq.offer(node);
}

ListNode newLists = new ListNode(-1);
ListNode curr = newLists;

while (!pq.isEmpty()) {
ListNode minNode = pq.poll();
curr.next = minNode;
curr = curr.next;

if (minNode.next != null) {
pq.offer(minNode.next);
}
}

return newLists.next;
}
}
35 changes: 35 additions & 0 deletions search-in-rotated-sorted-array/imsosleepy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// O(log n)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๊ณ  ์žˆ๋‹ค.
// O(log n)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š” ํƒ์ƒ‰ ๋ฌธ์ œ๋Š” ๋Œ€๋ถ€๋ถ„ ๋ฐ”์ด๋„ˆ๋ฆฌ ์„œ์น˜๋กœ ํ•ด๊ฒฐ๋œ๋‹ค.
// ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์ด ์ •๋ ฌ๋˜์–ด์žˆ๋‹ค๋Š” ์ ์—์„œ ์ด์ง„ํƒ์ƒ‰์„ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
class Solution {
public int search(int[] nums, int target) {
int left = 0, right = nums.length - 1;

while (left <= right) {
int mid = left + (right - left) / 2;

if (nums[mid] == target) {
return mid;
}

// ์™ผ์ชฝ์ด ์ •๋ ฌ๋œ ๊ฒฝ์šฐ
if (nums[left] <= nums[mid]) {
if (nums[left] <= target && target < nums[mid]) {
right = mid - 1;
} else {
left = mid + 1;
}
}
// ์˜ค๋ฅธ์ชฝ์ด ์ •๋ ฌ๋œ ๊ฒฝ์šฐ
else {
if (nums[mid] < target && target <= nums[right]) {
left = mid + 1;
} else {
right = mid - 1;
}
}
}

return -1;
}
}

0 comments on commit 687e199

Please sign in to comment.