Skip to content

Commit 6555c38

Browse files
authored
Merge pull request #1105 from imsosleepy/main
[Ackku] week 14
2 parents 461836b + 8d613c3 commit 6555c38

File tree

6 files changed

+186
-18
lines changed

6 files changed

+186
-18
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,29 @@
1-
// dfs์™€ ๋ถ„ํ•  ์ •๋ณต๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ๋˜๋Š” ๋ฌธ์ œ
2-
// dfs์ธ ๊ฒƒ์„ ์•Œ์•˜์œผ๋‚˜ ๋ชจ๋“  ์ˆซ์ž๊ฐ€ ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ๋ฅผ ํŒ๋ณ„ํ•˜์ง€ ๋ชปํ•ด GPT์—๊ฒŒ ๋„์›€์„ ์ฒ˜ํ•จ
1+
// ๊ทธ๋™์•ˆ์˜ ๋Œ€๋ถ€๋ถ„์˜ ํŠธ๋ฆฌ๋ฌธ์ œ๋Š” DFS๋กœ ํ•ด๊ฒฐ ๋์–ด์„œ.. ๊ทธ๋ ‡๊ฒŒ ํ•ด์•ผํ•˜ ์‹ถ์—ˆ๋Š”๋ฐ
2+
// ๊ฐ€๋กœ๋กœ ๋‚˜์—ด๋˜๊ธฐ ๋•Œ๋ฌธ์— BFS๊ฐ€ ์ ํ•ฉํ•จ
3+
// ํ•œ๋ฒˆ์˜ ์ˆœํšŒ๋กœ ํ•ด๊ฒฐ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N)
34
class Solution {
4-
private int maxSum = Integer.MIN_VALUE; // ์ „์ฒด ์ตœ๋Œ€ ๊ฒฝ๋กœ ํ•ฉ ์ €์žฅ
5+
public List<List<Integer>> levelOrder(TreeNode root) {
6+
List<List<Integer>> result = new ArrayList<>();
7+
if (root == null) return result;
58

6-
public int maxPathSum(TreeNode root) {
7-
dfs(root);
8-
return maxSum;
9-
}
9+
Queue<TreeNode> queue = new LinkedList<>();
10+
queue.offer(root);
1011

11-
private int dfs(TreeNode node) {
12-
if (node == null) return 0; // base case
12+
while (!queue.isEmpty()) {
13+
int levelSize = queue.size();
14+
List<Integer> level = new ArrayList<>();
1315

14-
// ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ๊ฒฝ๋กœ ํ•ฉ (์Œ์ˆ˜๋Š” ํฌํ•จ X โ†’ Math.max(0, value))
15-
int left = Math.max(0, dfs(node.left));
16-
int right = Math.max(0, dfs(node.right));
16+
for (int i = 0; i < levelSize; i++) {
17+
TreeNode node = queue.poll();
18+
level.add(node.val);
1719

18-
// ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•œ ์ตœ๋Œ€ ๊ฒฝ๋กœ (์™ผ์ชฝ + ๋ฃจํŠธ + ์˜ค๋ฅธ์ชฝ)
19-
int pathSum = left + node.val + right;
20+
if (node.left != null) queue.offer(node.left);
21+
if (node.right != null) queue.offer(node.right);
22+
}
2023

21-
// ์ตœ๋Œ€ ๊ฒฝ๋กœ ๊ฐ’ ๊ฐฑ์‹ 
22-
maxSum = Math.max(maxSum, pathSum);
24+
result.add(level);
25+
}
2326

24-
// โœ… ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ์ตœ๋Œ€ ๊ฒฝ๋กœ ๊ฐ’๋งŒ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ (์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ)
25-
return node.val + Math.max(left, right);
27+
return result;
2628
}
2729
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// dfs์™€ ๋ถ„ํ•  ์ •๋ณต๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ๋˜๋Š” ๋ฌธ์ œ
2+
// dfs์ธ ๊ฒƒ์„ ์•Œ์•˜์œผ๋‚˜ ๋ชจ๋“  ์ˆซ์ž๊ฐ€ ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ๋ฅผ ํŒ๋ณ„ํ•˜์ง€ ๋ชปํ•ด GPT์—๊ฒŒ ๋„์›€์„ ์ฒ˜ํ•จ
3+
class Solution {
4+
private int maxSum = Integer.MIN_VALUE; // ์ „์ฒด ์ตœ๋Œ€ ๊ฒฝ๋กœ ํ•ฉ ์ €์žฅ
5+
6+
public int maxPathSum(TreeNode root) {
7+
dfs(root);
8+
return maxSum;
9+
}
10+
11+
private int dfs(TreeNode node) {
12+
if (node == null) return 0; // base case
13+
14+
// ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ๊ฒฝ๋กœ ํ•ฉ (์Œ์ˆ˜๋Š” ํฌํ•จ X โ†’ Math.max(0, value))
15+
int left = Math.max(0, dfs(node.left));
16+
int right = Math.max(0, dfs(node.right));
17+
18+
// ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•œ ์ตœ๋Œ€ ๊ฒฝ๋กœ (์™ผ์ชฝ + ๋ฃจํŠธ + ์˜ค๋ฅธ์ชฝ)
19+
int pathSum = left + node.val + right;
20+
21+
// ์ตœ๋Œ€ ๊ฒฝ๋กœ ๊ฐ’ ๊ฐฑ์‹ 
22+
maxSum = Math.max(maxSum, pathSum);
23+
24+
// โœ… ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ์ตœ๋Œ€ ๊ฒฝ๋กœ ๊ฐ’๋งŒ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ (์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ)
25+
return node.val + Math.max(left, right);
26+
}
27+
}

โ€Žcounting-bits/imsosleepy.java

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// Integer.bitCount(i)๋Š” O(log n) ์ด๊ฑธ๋ฆผ ๊ทธ๋ž˜์„œ n๋ฒˆ ๋ฐ˜๋ณตํ•˜๋ฉด O(nlogn)
2+
public static int[] countBits(int n) {
3+
int[] ans = new int[n + 1];
4+
5+
for (int i = 0; i <= n; i++) {
6+
ans[i] = Integer.bitCount(i);
7+
}
8+
9+
return ans;
10+
}

โ€Žhouse-robber-ii/imsosleepy.java

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// house robber 1์ด dp๋ฌธ์ œ์—ฌ์„œ dp๋ฌธ์ œ๋ผ๋Š”๊ฑฐ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Œ
2+
// ์‹œ์ž‘์ ์„ ๋‹ค๋ฅด๊ฒŒ ํ•ด์„œ ๋‘๊ฐœ์˜ dp๋ฅผ ๊ฒฐํ•ฉํ•˜๋Š” ์•„์ด๋””์–ด๋Š” ๋งž์•˜์Œ(์ฒซ ์ง‘์„ ํ„ธ์—ˆ์„๋•Œ, ๋งˆ์ง€๋ง‰ ์ง‘์„ ํ„ธ์—ˆ์„ ๋•Œ)
3+
// ๊ตฌํ˜„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜๊ฑธ๋ ค์„œ GPT์˜ ๋„์›€์„ ๋ฐ›์Œ..
4+
// DP๋Š” ์•„์ด๋””์–ด๊ฐ€ ์ ˆ๋ฐ˜์ด๋ผ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ๊ตฌํ˜„์„ ์ž˜ ๋ชปํ•ด์„œ ์•„์‰ฌ์›€
5+
class Solution {
6+
public int rob(int[] nums) {
7+
if (nums.length == 1) return nums[0]; // ์ง‘์ด ํ•˜๋‚˜๋ฉด ๊ทธ ์ง‘๋งŒ ํ„ธ๋ฉด ๋จ.
8+
9+
int n = nums.length;
10+
11+
// 1. ์ฒซ ๋ฒˆ์งธ ์ง‘์„ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ (nums[1] ~ nums[n-1])
12+
int[] dp1 = new int[n];
13+
dp1[0] = 0; // ์ฒซ ๋ฒˆ์งธ ์ง‘์„ ํฌํ•จํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ 0
14+
dp1[1] = nums[1]; // ๋‘ ๋ฒˆ์งธ ์ง‘์„ ํ„ธ์—ˆ์„ ๊ฒฝ์šฐ
15+
16+
for (int i = 2; i < n; i++) {
17+
dp1[i] = Math.max(dp1[i - 1], dp1[i - 2] + nums[i]);
18+
}
19+
20+
// 2. ๋งˆ์ง€๋ง‰ ์ง‘์„ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ (nums[0] ~ nums[n-2])
21+
int[] dp2 = new int[n];
22+
dp2[0] = nums[0]; // ์ฒซ ๋ฒˆ์งธ ์ง‘์„ ํ„ธ์—ˆ์„ ๊ฒฝ์šฐ
23+
dp2[1] = Math.max(nums[0], nums[1]); // ๋‘ ๋ฒˆ์งธ ์ง‘์„ ํ„ธ์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Œ
24+
25+
for (int i = 2; i < n - 1; i++) {
26+
dp2[i] = Math.max(dp2[i - 1], dp2[i - 2] + nums[i]);
27+
}
28+
29+
return Math.max(dp1[n - 1], dp2[n - 2]);
30+
}
31+
}

โ€Žmeeting-rooms-ii/imsosleepy.java

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// ์ •๋ ฌ์„ ์ด์šฉํ•˜๋ฉด O(nlogn)์œผ๋กœ ํ’€๋ฆฌ๋Š”๋ฐ ๋‹ค๋ฅธ ์•„์ด๋””์–ด๊ฐ€ ์•ˆ๋– ์˜ค๋ฆ„
2+
class Solution {
3+
public int minMeetingRooms(int[][] intervals) {
4+
if (intervals == null || intervals.length == 0) return 0;
5+
6+
int n = intervals.length;
7+
int[] startTimes = new int[n];
8+
int[] endTimes = new int[n];
9+
10+
for (int i = 0; i < n; i++) {
11+
startTimes[i] = intervals[i][0];
12+
endTimes[i] = intervals[i][1];
13+
}
14+
15+
Arrays.sort(startTimes);
16+
Arrays.sort(endTimes);
17+
18+
int rooms = 0;
19+
int endPointer = 0;
20+
21+
for (int startPointer = 0; startPointer < n; startPointer++) {
22+
if (startTimes[startPointer] < endTimes[endPointer]) {
23+
rooms++;
24+
endPointer++;
25+
}
26+
}
27+
28+
return rooms;
29+
}
30+
}

โ€Žword-search-ii/imsosleepy.java

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
// ๋ชจ๋“  ์œ„์น˜์—์„œ DFS๋ฅผ ์‹คํ–‰ or BFS๋ฅผ ๋Œ๋ฉด์„œ ๋‹จ์–ด ์ฐพ๋Š” ๊ฒฝ์šฐ ๋ชจ๋“  ๊ฒฝ์šฐ์— ํƒ€์ž„์•„์›ƒ์ด ๋ฐœ์ƒ
2+
// ๋„์ €ํžˆ ํ•ด๊ฒฐ์„ ๋ชปํ• ๊ฑฐ ๊ฐ™์•„์„œ GPT์˜ ๋„์›€์„ ๋ฐ›์Œ
3+
// Trie๋ฅผ ์ด์šฉํ–ˆ๋Š”๋ฐ ์กฐ๊ธˆ ๋” ๊ณ ๋ฏผํ•ด๋ด์•ผํ•  ๋“ฏ
4+
class TrieNode {
5+
Map<Character, TrieNode> children = new HashMap<>();
6+
String word = null;
7+
}
8+
9+
class Solution {
10+
public List<String> findWords(char[][] board, String[] words) {
11+
List<String> result = new ArrayList<>();
12+
TrieNode root = buildTrie(words);
13+
14+
for (int i = 0; i < board.length; i++) {
15+
for (int j = 0; j < board[0].length; j++) {
16+
dfs(board, i, j, root, result);
17+
}
18+
}
19+
return result;
20+
}
21+
22+
// Trie(ํŠธ๋ผ์ด) ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ถ•
23+
private TrieNode buildTrie(String[] words) {
24+
TrieNode root = new TrieNode();
25+
for (String word : words) {
26+
TrieNode node = root;
27+
for (char c : word.toCharArray()) {
28+
node.children.putIfAbsent(c, new TrieNode());
29+
node = node.children.get(c);
30+
}
31+
node.word = word;
32+
}
33+
return root;
34+
}
35+
36+
// DFS + ๋ฐฑํŠธ๋ž˜ํ‚น ํƒ์ƒ‰
37+
private void dfs(char[][] board, int i, int j, TrieNode node, List<String> result) {
38+
char c = board[i][j];
39+
if (!node.children.containsKey(c)) return; // ํ˜„์žฌ ๋ฌธ์ž์™€ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์ด Trie์— ์—†์œผ๋ฉด ์ข…๋ฃŒ
40+
41+
TrieNode nextNode = node.children.get(c);
42+
if (nextNode.word != null) { // ๋‹จ์–ด๋ฅผ ์ฐพ์•˜์œผ๋ฉด ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€
43+
result.add(nextNode.word);
44+
nextNode.word = null; // ์ค‘๋ณต ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ์ œ๊ฑฐ
45+
}
46+
47+
// ๋ฐฉ๋ฌธ ํ‘œ์‹œ (๋ฐฑํŠธ๋ž˜ํ‚น์„ ์œ„ํ•ด)
48+
board[i][j] = '#';
49+
50+
// 4๋ฐฉํ–ฅ ํƒ์ƒ‰
51+
int[] dx = {-1, 1, 0, 0};
52+
int[] dy = {0, 0, -1, 1};
53+
for (int d = 0; d < 4; d++) {
54+
int x = i + dx[d], y = j + dy[d];
55+
if (x >= 0 && x < board.length && y >= 0 && y < board[0].length) {
56+
dfs(board, x, y, nextNode, result);
57+
}
58+
}
59+
60+
// ๋ฐฑํŠธ๋ž˜ํ‚น (์›๋ž˜ ๋ฌธ์ž๋กœ ๋ณต์›)
61+
board[i][j] = c;
62+
63+
// **์ตœ์ ํ™”**: ๋” ์ด์ƒ ์ž์‹์ด ์—†์œผ๋ฉด Trie์—์„œ ํ•ด๋‹น ๋…ธ๋“œ ์‚ญ์ œ
64+
if (nextNode.children.isEmpty()) {
65+
node.children.remove(c);
66+
}
67+
}
68+
}

0 commit comments

Comments
ย (0)