Skip to content

Commit f02b7bf

Browse files
authored
Merge pull request #353 from taekwon-dev/main
[์œคํƒœ๊ถŒ] Week2 ๋ฌธ์ œ ํ’€์ด
2 parents 63b996b + a0fc24d commit f02b7bf

File tree

3 files changed

+83
-0
lines changed

3 files changed

+83
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/**
2+
* https://www.algodale.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/
3+
*
4+
* <ํ’€์ด1 ๊ธฐ์ค€> ์‹œ๋„!
5+
* - ๊ณต๊ฐ„ ๋ณต์žก๋„: O(N^2) - Java ์—์„œ๋Š” Call-by-value, ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ ์ธ์ž ๊ฐ’์ด ๋ณต์‚ฌ๋˜์–ด ์ „๋‹ฌ๋จ / ๋ฐฐ์—ด ๊ธธ์ด์— ๋”ฐ๋ผ์„œ ์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ์ด ์ ์  ๊นŠ์–ด์ง (๊ฐ ํ˜ธ์ถœ๋งˆ๋‹ค ์„œ๋ธŒ ๋ฐฐ์—ด ์ƒ์„ฑ)
6+
* - ์‹œ๊ฐ„ ๋ณต์žก๋„: inorder ๋ฐฐ์—ด์—์„œ root ๋…ธ๋“œ๋ฅผ ์ฐพ์•„๊ฐ€๋Š” ๊ณผ์ •์ด O(N), ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ์žฌ๊ท€ ํ˜ธ์ถœ๋งˆ๋‹ค ๋ฐ˜๋ณตํ•˜๋ฏ€๋กœ O(N^2)
7+
*/
8+
class Solution {
9+
public TreeNode buildTree(int[] preorder, int[] inorder) {
10+
return buildTree(preorder, inorder, 0, 0, inorder.length - 1);
11+
}
12+
13+
private TreeNode buildTree(int[] preorder, int[] inorder, int rootIdx, int inorderStartIdx, int inorderEndIdx) {
14+
if (inorderStartIdx > inorderEndIdx) {
15+
return null;
16+
}
17+
18+
int rootVal = preorder[rootIdx];
19+
TreeNode root = new TreeNode(rootVal);
20+
21+
int rootIdxOnInorder = 0;
22+
for (int i = inorderStartIdx; i <= inorderEndIdx; i++) {
23+
if (inorder[i] == rootVal) {
24+
rootIdxOnInorder = i;
25+
break;
26+
}
27+
}
28+
29+
int leftLength = rootIdxOnInorder - inorderStartIdx;
30+
31+
root.left = buildTree(preorder, inorder, rootIdx + 1, inorderStartIdx, rootIdxOnInorder - 1);
32+
root.right = buildTree(preorder, inorder, rootIdx + 1 + leftLength, rootIdxOnInorder + 1, inorderEndIdx);
33+
34+
return root;
35+
}
36+
}

โ€Žcounting-bits/taekwon-dev.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(N)
3+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(N)
4+
* - ๋งŒ์•ฝ 1 ~ N ๊นŒ์ง€ ๊ฐ ์ˆ˜์— ๋Œ€ํ•ด์„œ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•œ ๋’ค 1์˜ ๊ฐœ์ˆ˜๋ฅผ ์นด์šดํŠธ ํ–ˆ๋‹ค๋ฉด? - O(NlogN)
5+
* Note:
6+
* - a >> b: a ์˜ ์ด์ง„ ํ‘œํ˜„์„ ์˜คํ”ˆ์ชฝ์œผ๋กœ b ๋น„ํŠธ๋งŒํผ ์ด๋™
7+
* - i >> 1: a ์˜ ์ด์ง„ ํ‘œํ˜„์—์„œ ๊ฐ€์žฅ ์˜คํ”ˆ์ชฝ ํ•˜๋‚˜๊ฐ€ ์ž˜๋ฆผ (i๋Š” ์–‘์ˆ˜ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ, ์™ผ์ชฝ์€ 0์œผ๋กœ ์ฑ„์›Œ์ง)
8+
* - a & b: AND ์—ฐ์‚ฐ
9+
* - i & 1: ์ด์ „ ๊ฒฐ๊ณผ ๊ฐ’์ด ๋ฉ”๋ชจ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ๋‚ด๊ฐ€ ๊ถ๊ธˆํ•œ ๊ฒƒ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์ž๋ฆฌ ์ˆ˜ ๊ฐ’์ด 1์ธ์ง€ ์—ฌ๋ถ€.
10+
*/
11+
class Solution {
12+
public int[] countBits(int n) {
13+
int[] result = new int[n + 1];
14+
for (int i = 1; i <= n; i++) {
15+
result[i] = result[i >> 1] + (i & 1);
16+
}
17+
return result;
18+
}
19+
}

โ€Žvalid-anagram/taekwon-dev.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* ์ฒ˜์Œ ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ๋“ค์—ˆ๋˜ ์ƒ๊ฐ: ์ •๋ ฌ ์‹œ์ผœ์„œ ๊ฐ™์œผ๋ฉด anagram?
3+
* ๊ทผ๋ฐ, ์ •๋ ฌ ์‹œ์ผœ์„œ ๊ฐ™๋‹ค๋ฉด, ๊ฒฐ๊ตญ ๋ฌธ์ž์—ด์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ ๋ฌธ์ž์˜ ๋นˆ๋„์ˆ˜๊ฐ€ ๊ฐ™๋‹ค.
4+
*
5+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(N)
6+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)
7+
*/
8+
class Solution {
9+
public boolean isAnagram(String s, String t) {
10+
if (s.length() != t.length()) return false;
11+
12+
int[] charCount = new int[26];
13+
14+
for (int i = 0; i < s.length(); i++) {
15+
charCount[s.charAt(i) - 'a']++;
16+
}
17+
18+
for (int i = 0; i < t.length(); i++) {
19+
int index = t.charAt(i) - 'a';
20+
charCount[index]--;
21+
if (charCount[index] < 0) {
22+
return false;
23+
}
24+
}
25+
26+
return true;
27+
}
28+
}

0 commit comments

Comments
ย (0)