Skip to content

Commit c65df35

Browse files
authored
Merge pull request #1955 from rivkode/main
[rivkode] WEEK 14 Solutions
2 parents 1387991 + 7288a49 commit c65df35

File tree

3 files changed

+196
-0
lines changed

3 files changed

+196
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
/*
2+
BFS๋ฅผ ์‚ฌ์šฉํ•œ ์ด์œ ๋Š” depth ๊ฐ€ ๊ธฐ์ค€์ด ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
3+
depth ๋ณ„๋กœ value๊ฐ’์„ ๋„ฃ์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— BFS๋กœ ํƒ์ƒ‰ํ•˜๋ฉฐ ํ•ด๋‹นํ•˜๋Š” ๋ชจ๋“  ๊ฐ’๋“ค์„ List์— ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.
4+
์ด๋•Œ ํฌ์ธํŠธ๋Š” ๋ช‡๊ฐœ์˜ ๊ฐ’๋“ค์„ depth ๋ณ„๋กœ ๋‚˜๋ˆŒ๊ฒƒ์ธ๊ฐ€ ? ์ธ๋ฐ ์™œ๋ƒํ•˜๋ฉด queue๋Š” ์ž์‹ ๋…ธ๋“œ๋“ค์„ ํƒ์ƒ‰ํ•˜๋ฉฐ ์ง€์†์ ์œผ๋กœ ์ถ”๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
5+
๊ทธ๋ž˜์„œ 2์ค‘์œผ๋กœ loop๋ฅผ ๋Œ์•„์•ผ ํ•œ๋‹ค.
6+
์ฒซ๋ฒˆ์งธ๋Š” while๋ฌธ์œผ๋กœ queue๊ฐ€ empty๋ ๋•Œ๊นŒ์ง€ ํ™•์ธํ•˜๋Š” loop์ด๊ณ 
7+
๋‘๋ฒˆ์งธ๋Š” queue ์‚ฌ์ด์ฆˆ๋ฅผ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•˜์—ฌ ํŠน์ • level์˜ ๊ฐœ์ˆ˜ ๋งŒํผ ๋„๋Š” for loop ์ด๋‹ค.
8+
์ด๋ ‡๊ฒŒ 2๋ฒˆ loop๋ฅผ ๋Œ๋ฉด depth ๋ณ„๋กœ size๋ฅผ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค.
9+
*/
10+
11+
/**
12+
* Definition for a binary tree node.
13+
* public class TreeNode {
14+
* int val;
15+
* TreeNode left;
16+
* TreeNode right;
17+
* TreeNode() {}
18+
* TreeNode(int val) { this.val = val; }
19+
* TreeNode(int val, TreeNode left, TreeNode right) {
20+
* this.val = val;
21+
* this.left = left;
22+
* this.right = right;
23+
* }
24+
* }
25+
*/
26+
import java.util.*;
27+
28+
class Solution {
29+
public List<List<Integer>> levelOrder(TreeNode root) {
30+
Queue<TreeNode> queue = new LinkedList<>();
31+
List<List<Integer>> result = new ArrayList<>();
32+
33+
if (root == null) {
34+
return new ArrayList<>();
35+
}
36+
37+
queue.offer(root);
38+
39+
while(!queue.isEmpty()) {
40+
List<Integer> levelList = new ArrayList<>();
41+
int queueSize = queue.size();
42+
43+
for (int i=0; i<queueSize; i++) {
44+
TreeNode node = queue.poll();
45+
if (node == null) {
46+
continue;
47+
}
48+
49+
levelList.add(node.val);
50+
51+
if (node.left != null) {
52+
queue.offer(node.left);
53+
}
54+
55+
if (node.right != null) {
56+
queue.offer(node.right);
57+
}
58+
}
59+
result.add(levelList);
60+
}
61+
62+
return result;
63+
}
64+
65+
public class TreeNode {
66+
int val;
67+
TreeNode left;
68+
TreeNode right;
69+
70+
TreeNode() {}
71+
TreeNode(int val) { this.val = val; }
72+
TreeNode(int val, TreeNode left, TreeNode right) {
73+
this.val = val;
74+
this.left = left;
75+
this.right = right;
76+
}
77+
}
78+
}
79+
80+
81+
82+

โ€Žcounting-bits/rivkode.javaโ€Ž

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/*
2+
์ž…๋ ฅ๋ฐ›์€ n์— ๋Œ€ํ•ด toBinaryString() ์„ ์‚ฌ์šฉํ•˜์—ฌ binaryString ๊ฐ’์„ ์•Œ์•„๋‚ธ๋’ค charAt()์œผ๋กœ ๊ฐ ์ธ๋ฑ์Šค๋ณ„ ์ ‘๊ทผํ•˜์—ฌ 1์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฐพ์•„๋‚ด๋Š” ๋ฐฉ์‹์ด๋‹ค.
3+
*/
4+
5+
class Solution {
6+
public int[] countBits(int n) {
7+
int[] answer = new int[n + 1];
8+
for (int i=0; i<n+1; i++) {
9+
String bit = Integer.toBinaryString(i);
10+
System.out.println(bit);
11+
int cnt = 0;
12+
for (int j=0; j < bit.length(); j++) {
13+
char c = bit.charAt(j);
14+
int num = c-'0';
15+
if (num == 1) {
16+
cnt += 1;
17+
}
18+
}
19+
20+
answer[i] = cnt;
21+
}
22+
23+
return answer;
24+
}
25+
}
26+
27+
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
/*
2+
dp๋ฅผ ์‚ฌ์šฉ dp๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” dfs๋ฅผ ํ•  ๊ฒฝ์šฐ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜๋ฏ€๋กœ
3+
๊ทธ๋ฆฌ๊ณ  i๋ฒˆ์งธ์˜ ์ตœ๋Œ€๊ฐ’์„ ์ฐพ๋Š” ๋ฌธ์ œ๋Š” ์ ํ™”์‹์œผ๋กœ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์ ํ™”์‹์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉด dp๋„ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
4+
์•ž์œผ๋กœ ๋ฐ˜๋ณต๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด dp๋ฅผ ์ ๊ทน ํ™œ์šฉํ•ด๋ณด์ž.
5+
6+
๊ฐ dp ๋ฐฐ์—ด๋“ค์˜ 1๋ฒˆ์งธ ์ง‘์— ๋Œ€ํ•ด ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์ฃผ๊ณ  for ๋ฃจํ”„์˜ i=2๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š”๊ฒŒ ํฌ์ธํŠธ์˜€๋‹ค.
7+
nums[i]๋กœ ์ ‘๊ทผํ–ˆ์„๋•Œ IndexOutOfRange์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๊ฒŒ ์•„๋‹Œ๊ฐ€ ์‹ถ์—ˆ์ง€๋งŒ 2๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์ตœ๋Œ€๊ฐ’์ด i๋Š” ๋ฐฐ์—ด-1 ๊นŒ์ง€๋‹ค.
8+
9+
dp1์€ ์ฒซ๋ฒˆ์งธ์ง‘์„ ๋ฐฉ๋ฌธํ–ˆ์„๋•Œ, dp2๋Š” ๋‘๋ฒˆ์งธ์ง‘์„ ๋ฐฉ๋ฌธํ–ˆ์„๋•Œ์ด๋ฉฐ dp1์€ ๋งˆ์ง€๋ง‰์ง‘์„ ๋ฐฉ๋ฌธํ•˜์ง€ ๋ชปํ•œ๋‹ค.
10+
์ด ์กฐ๊ฑด์„ i๊ฐ€ nums.length๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ๋กœ ํŒ๋‹จํ•œ๋‹ค.
11+
12+
์ตœ์ข… ์ตœ๋Œ“๊ฐ’์€ ๊ฐ dp ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์—์„œ 2๋ฒˆ์งธ์— ์ €์žฅ๋˜์–ด์žˆ์œผ๋ฏ€๋กœ nums๋ฐฐ์—ด ํฌ๊ธฐ - 1, -2 ํ•œ ๊ฐ’์œผ๋กœ ์กฐํšŒํ•œ๋‹ค.
13+
*/
14+
15+
16+
import java.util.*;
17+
18+
class Solution {
19+
public int rob(int[] nums) {
20+
int[] dp1 = new int[nums.length];
21+
int[] dp2 = new int[nums.length];
22+
23+
if (nums.length == 1) {
24+
return nums[0];
25+
}
26+
27+
dp1[0] = dp1[1] = nums[0];
28+
dp2[1] = nums[1];
29+
30+
for (int i=2; i<nums.length; i++) {
31+
if (i < nums.length) {
32+
dp1[i] = Math.max((nums[i] + dp1[i-2]), dp1[i-1]);
33+
}
34+
dp2[i] = Math.max((nums[i] + dp2[i-2]), dp2[i-1]);
35+
}
36+
37+
return Math.max(dp1[nums.length -2], dp2[nums.length -1]);
38+
}
39+
}
40+
41+
42+
43+
44+
// ์•„๋ž˜๋Š” dfs ๋กœ ํ‘ผ ๋ฐฉ์‹
45+
// import java.util.*;
46+
47+
// class Solution {
48+
// public int rob(int[] nums) {
49+
// if (nums == null || nums.length == 0) {
50+
// return 0;
51+
// }
52+
53+
// if (nums.length == 1) {
54+
// return nums[0];
55+
// }
56+
57+
// return Math.max(
58+
// nums[0] + dfs(nums, 2, true), dfs(nums,1,false)
59+
// );
60+
61+
// }
62+
63+
// public int dfs(int[] nums, int idx, boolean first) {
64+
// // idx๊ฐ€ nums์˜ ๊ธธ์ด์™€ ๊ฐ™๊ฑฐ๋‚˜ ํฌ๋‹ค๋Š” ๊ฒƒ์€ ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ–ˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ 0 return
65+
// if (idx >= nums.length) {
66+
// return 0;
67+
// }
68+
69+
// // idx๊ฐ€ nums์˜ ๋์— ๋„๋‹ฌํ–ˆ์„ ๊ฒฝ์šฐ first์˜ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ’์ด ๋ฐ”๋€๋‹ค.
70+
// if (idx == nums.length - 1) {
71+
// // ์ฒซ๋ฒˆ์งธ๋ฅผ ๋ฐฉ๋ฌธ์‹œ ๋งˆ์ง€๋ง‰์€ ์‚ฌ์šฉ๋ถˆ๊ฐ€
72+
// if (first) {
73+
// return 0;
74+
// } else {
75+
// return nums[nums.length - 1];
76+
// }
77+
// }
78+
79+
// // ํ˜„์žฌ ์ง‘์„ ํ„ธ์—ˆ์„๋•Œ ํ˜„์žฌ idx์˜ ๊ฐ’๊ณผ ๋‹ค์Œ ์ง‘์„ ํ„ด ์ตœ๋Œ€๊ฐ’
80+
// int curRob = nums[idx] + dfs(nums, idx + 2, first);
81+
// // ํ˜„์žฌ ์ง‘์„ ๊ฑด๋„ˆ๋›ธ๋•Œ ๋‹ค์Œ idx์˜ ๊ฐ’์œผ๋กœ ๋‹ค์Œ ์ง‘์„ ํ„ด ์ตœ๋Œ€๊ฐ’
82+
// int nextRob = dfs(nums, idx + 1, first);
83+
84+
// return Math.max(curRob, nextRob);
85+
// }
86+
// }
87+

0 commit comments

Comments
ย (0)