Skip to content

Commit 0fcb972

Browse files
authored
Merge pull request #1307 from Tessa1217/main
[Tessa1217] Week 03 Solutions
2 parents 04ed987 + 452f931 commit 0fcb972

File tree

5 files changed

+186
-0
lines changed

5 files changed

+186
-0
lines changed

โ€Žcombination-sum/Tessa1217.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import java.util.List;
2+
import java.util.ArrayList;
3+
/**
4+
์ค‘๋ณต ๋˜์ง€ ์•Š์€ ์š”์†Œ๋“ค์ด ๋“ค์–ด์žˆ๋Š” candidates ๋ฐฐ์—ด์ด ์ฃผ์–ด์ง€๊ณ  target ๊ฐ’์ด ์ฃผ์–ด์ง„๋‹ค.
5+
ํ•ฉ์ด target๊ณผ ๊ฐ™์€ ์ค‘๋ณต๋˜์ง€ ์•Š์€ ์กฐํ•ฉ์„ ๋ชจ๋‘ ๋ฐ˜ํ™˜ํ•˜์‹œ์˜ค.
6+
*/
7+
class Solution {
8+
9+
List<List<Integer>> answer = new ArrayList<>();
10+
11+
public List<List<Integer>> combinationSum(int[] candidates, int target) {
12+
combination(0, candidates, target, 0, new ArrayList<>());
13+
return answer;
14+
}
15+
16+
// ์‹œ๊ฐ„๋ณต์žก๋„ O(2^target)
17+
public void combination(int idx, int[] candidates, int target, int currentSum, List<Integer> comb) {
18+
// ๋ˆ„์  ํ•ฉ์ด ๋„˜์œผ๋ฉด
19+
if (currentSum > target) {
20+
return;
21+
}
22+
23+
// ๋ˆ„์  ํ•ฉ์ด ํƒ€๊ฒŸ ๊ฐ’๊ณผ ๊ฐ™์œผ๋ฉด
24+
if (currentSum == target) {
25+
answer.add(new ArrayList<>(comb));
26+
return;
27+
}
28+
29+
for (int i = idx; i < candidates.length; i++) {
30+
comb.add(candidates[i]);
31+
combination(i, candidates, target, currentSum + candidates[i], comb);
32+
comb.remove(comb.size() - 1);
33+
}
34+
}
35+
}
36+

โ€Ždecode-ways/Tessa1217.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/**
2+
์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์„ ๋ณตํ˜ธํ™” ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜์‹œ์˜ค.
3+
๋ฌธ์ž์—ด์€ A-Z๊นŒ์ง€ ์ˆซ์ž 1-26์œผ๋กœ ์น˜ํ™˜
4+
์˜ˆ์‹œ: "AAJF" => (1, 1, 10, 6), (11, 10, 6)...
5+
*/
6+
class Solution {
7+
8+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(n), ๊ณต๊ฐ„๋ณต์žก๋„: O(n)
9+
public int numDecodings(String s) {
10+
11+
int[] dp = new int[s.length() + 1];
12+
13+
// contain leading zero(s)
14+
if (s.charAt(0) == '0') {
15+
return 0;
16+
}
17+
18+
dp[0] = 1;
19+
dp[1] = 1;
20+
21+
for (int i = 2; i <= s.length(); i++) {
22+
23+
// 1์ž๋ฆฌ์ˆ˜ ๊ฒ€์‚ฌ
24+
int one = Integer.parseInt(Character.toString(s.charAt(i - 1)));
25+
26+
if (one != 0) {
27+
dp[i] += dp[i - 1];
28+
}
29+
30+
// 2์ž๋ฆฌ์ˆ˜ ๊ฒ€์‚ฌ
31+
int two = Integer.parseInt(Character.toString(s.charAt(i - 2))) * 10 + one;
32+
33+
if (two >= 10 && two <= 26) {
34+
dp[i] += dp[i - 2];
35+
}
36+
37+
}
38+
39+
return dp[s.length()];
40+
}
41+
42+
}
43+

โ€Žmaximum-subarray/Tessa1217.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/**
2+
์ •์ˆ˜ ๋ฐฐ์—ด์ด ์ฃผ์–ด์งˆ ๋•Œ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ๊ฐ€์žฅ ํฐ ํ•ฉ์„ ๊ตฌํ•˜์‹œ์˜ค.
3+
*/
4+
class Solution {
5+
6+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(n), ๊ณต๊ฐ„๋ณต์žก๋„: O(1)
7+
public int maxSubArray(int[] nums) {
8+
9+
int sum = nums[0];
10+
11+
for (int i = 1; i < nums.length; i++) {
12+
// ์ˆ˜ ์ด์–ด์„œ ๋”ํ• ์ง€ ์•„๋‹ˆ๋ฉด ํ˜„์žฌ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ• ์ง€ ์—ฌ๋ถ€ ํŒ๋‹จ
13+
nums[i] = Math.max(nums[i], nums[i] + nums[i - 1]);
14+
sum = Math.max(nums[i], sum);
15+
}
16+
17+
return sum;
18+
}
19+
20+
}
21+

โ€Žnumber-of-1-bits/Tessa1217.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/** ์ฃผ์–ด์ง„ ์ˆซ์ž์˜ Hamming weight ๊ตฌํ•˜๊ธฐ */
2+
class Solution {
3+
4+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(1), ๊ณต๊ฐ„๋ณต์žก๋„: O(1), ๋น„ํŠธ ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ
5+
public int hammingWeight(int n) {
6+
int count = 0;
7+
while (n != 0) {
8+
count += (n & 1);
9+
n >>>= 1;
10+
}
11+
return count;
12+
}
13+
14+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(1), ๊ณต๊ฐ„๋ณต์žก๋„: O(1)
15+
// public int hammingWeight(int n) {
16+
17+
// int count = 0;
18+
// while (n != 0) {
19+
// if (n % 2 == 1) {
20+
// count++;
21+
// }
22+
// n /= 2;
23+
// }
24+
// return count;
25+
// }
26+
27+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(1), ๊ณต๊ฐ„๋ณต์žก๋„: O(n)
28+
// public int hammingWeight(int n) {
29+
// return Integer.toBinaryString(n).replaceAll("0", "").length();
30+
// }
31+
}
32+

โ€Žvalid-palindrome/Tessa1217.java

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/** ๋Œ€๋ฌธ์ž ๋ฌธ์ž๋“ค์„ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ์•ŒํŒŒ๋ฒณ์ด ์•„๋‹Œ ๋ฌธ์ž๋“ค์„ ์ œ๊ฑฐํ–ˆ์„ ๋•Œ ์•ž๋’ค๊ฐ€ ๋˜‘๊ฐ™์ด ์ฝํžˆ๋Š” ๊ตฌ๋ฌธ์„ palindrome์ด๋ผ๊ณ  ํ•œ๋‹ค.
2+
์ฃผ์–ด์ง„ ๊ตฌ๋ฌธ์ด palindrome์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜์—ฌ boolean ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์„ธ์š”.
3+
*/
4+
class Solution {
5+
6+
// ํˆฌ ํฌ์ธํ„ฐ ํ™œ์šฉ ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n), ๊ณต๊ฐ„๋ณต์žก๋„: O(n)
7+
public boolean isPalindrome(String s) {
8+
9+
10+
int left = 0;
11+
int right = s.length() - 1;
12+
13+
while (left < right) {
14+
// ๋ฌธ์ž ๋˜๋Š” ์ˆซ์ž ์•„๋‹ ์‹œ
15+
while (left < right && !Character.isLetterOrDigit(s.charAt(left))) {
16+
left++;
17+
}
18+
while (left < right && !Character.isLetterOrDigit(s.charAt(right))) {
19+
right--;
20+
}
21+
// ์–‘ ํฌ์ธํ„ฐ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋ฆฌํ„ด
22+
if (Character.toLowerCase(s.charAt(left)) != Character.toLowerCase(s.charAt(right))) {
23+
return false;
24+
}
25+
26+
left++;
27+
right--;
28+
29+
}
30+
return true;
31+
}
32+
33+
// char ๋ฐฐ์—ด ํ™œ์šฉ ํ’€์ด: ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n), ๊ณต๊ฐ„๋ณต์žก๋„: O(n)
34+
// public boolean isPalindrome(String s) {
35+
// // non-alphanumeric (์ˆซ์ž ํฌํ•จ - test case "0P")
36+
// char[] convertArr = s.toLowerCase().replaceAll("[^a-z0-9]", "").toCharArray();
37+
// int maxIdx = convertArr.length - 1;
38+
// for (int i = 0; i <= maxIdx; i++) {
39+
// if (convertArr[i] != convertArr[maxIdx - i]) {
40+
// return false;
41+
// }
42+
// }
43+
// return true;
44+
// }
45+
46+
// StringBuffer reverse() ํ™œ์šฉ
47+
// public boolean isPalindrome(String s) {
48+
// // non-alphanumeric (์ˆซ์ž ํฌํ•จ - test case "0P")
49+
// String convertedString = s.toLowerCase().replaceAll("[^a-z0-9]", "");
50+
// StringBuffer sb = new StringBuffer(convertedString);
51+
// return convertedString.equals(sb.reverse().toString());
52+
// }
53+
}
54+

0 commit comments

Comments
ย (0)