Skip to content

Commit c2bc5b7

Browse files
Merge pull request #1262 from YoungSeok-Choi/feature/week-3
[YoungSeok-Choi] week 3 solutions
2 parents aa0817c + b5b77c2 commit c2bc5b7

File tree

5 files changed

+288
-0
lines changed

5 files changed

+288
-0
lines changed
+119
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
import java.util.ArrayList;
2+
import java.util.Arrays;
3+
import java.util.Collections;
4+
import java.util.HashSet;
5+
import java.util.List;
6+
import java.util.Set;
7+
8+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(n ^ target)
9+
class Solution {
10+
11+
public List<Integer> tArr = new ArrayList<>();
12+
public Set<List<Integer>> s = new HashSet<>();
13+
14+
public List<List<Integer>> combinationSum(int[] candidates, int target) {
15+
if(target == 1) {
16+
return new ArrayList<>();
17+
}
18+
19+
Arrays.sort(candidates);
20+
dfs(candidates, target, 0);
21+
22+
return new ArrayList<>(s);
23+
}
24+
25+
public void dfs(int[] candi, int target, int now) {
26+
27+
if(target < now) {
28+
return;
29+
}
30+
31+
// ์ •๋‹ต ๋ฐฐ์—ด์— ์ถ”๊ฐ€.
32+
if(target == now) {
33+
List<Integer> temp = new ArrayList<>(tArr);
34+
Collections.sort(temp);
35+
s.add(temp);
36+
return;
37+
}
38+
39+
for(int i = 0; i < candi.length; i++) {
40+
tArr.add(candi[i]);
41+
dfs(candi, target, (now + candi[i]));
42+
tArr.remove(tArr.size() - 1); // ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๋ฐฐ์—ด์˜ ์›์†Œ๋ฅผ ์ œ๊ฑฐ.
43+
}
44+
}
45+
}
46+
47+
48+
// NOTE: ์„ธ ์ˆ˜ ์ด์ƒ์˜ ์กฐํ•ฉ์˜ ํ•ฉ์„ ๊ตฌํ•˜์ง€ ๋ชปํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜.
49+
class WrongSolution {
50+
public List<List<Integer>> combinationSum(int[] candidates, int target) {
51+
List<List<Integer>> res = new ArrayList<>();
52+
List<List<Integer>> result = new ArrayList<>();
53+
54+
if(target == 1) {
55+
return new ArrayList<>();
56+
}
57+
58+
Arrays.sort(candidates);
59+
60+
// i๋ฒˆ์งธ ๊ฐ’์˜ ๋ฉ”๋ชจ ๊ตฌํ•˜๊ธฐ
61+
for(int i = 0; i < candidates.length; i++) {
62+
63+
// 0 ~ i - 1๊นŒ์ง€๋งŒ ์˜ ๊ฐ’์œผ๋กœ i๋ฒˆ์งธ ๊ฐ’๋ผ๋ฆฌ ๋‹ต์ด ๋‚˜๋Š”์ง€ ํ™•์ธ.
64+
for(int j = 0; j < i; j++) {
65+
int current = candidates[i];
66+
int before = candidates[j];
67+
68+
int start = 1;
69+
while(true) {
70+
71+
int startValue = current * start;
72+
if(startValue >= target) {
73+
break;
74+
}
75+
76+
List<Integer> ans = new ArrayList<>();
77+
78+
int diff = target - startValue;
79+
80+
if(diff % before == 0) {
81+
82+
for(int k = 0; k < start; k++) {
83+
ans.add(current);
84+
}
85+
86+
int temp = diff / before;
87+
for(int k = temp; k > 0; k--) {
88+
ans.add(before);
89+
}
90+
91+
res.add(ans);
92+
}
93+
94+
start++;
95+
}
96+
}
97+
98+
// i๋กœ๋งŒ ๋‹ต์„ ๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ.
99+
int copy = target;
100+
List<Integer> ans = new ArrayList<>();
101+
if(target % candidates[i] == 0) {
102+
int mok = copy /= candidates[i];
103+
while(mok > 0) {
104+
ans.add(candidates[i]);
105+
mok--;
106+
}
107+
res.add(ans);
108+
}
109+
}
110+
111+
112+
for (int i = res.size() - 1; i >= 0; i--) {
113+
List<Integer> inner = new ArrayList<>(res.get(i));
114+
result.add(inner);
115+
}
116+
117+
return result;
118+
}
119+
}

โ€Ždecode-ways/YoungSeok-Choi.java

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
2+
// NOTE: O(n)
3+
class Solution {
4+
public int numDecodings(String s) {
5+
6+
char[] cArr = s.toCharArray();
7+
int[] decode = new int[cArr.length];
8+
9+
if((cArr[0] - 48) == 0) {
10+
return 0;
11+
}
12+
13+
decode[0] = 1;
14+
15+
for(int i = 1; i < cArr.length; i++) {
16+
int cur = (int) cArr[i] - 48;
17+
int prev = (int) cArr[i - 1] - 48;
18+
19+
if(cur == prev && cur == 0) return 0;
20+
21+
String temp = "" + cArr[i - 1] + cArr[i];
22+
int tempI = Integer.parseInt(temp);
23+
24+
// NOTE: ์•„๋ž˜ if ๋ฌธ ๋‘๊ฐœ๊ฐ€ core logic
25+
if(cur != 0) {
26+
decode[i] += decode[i - 1];
27+
}
28+
29+
if(tempI >= 10 && tempI <= 26) {
30+
decode[i] += (i >= 2 ? decode[i - 2] : 1);
31+
}
32+
}
33+
34+
return decode[decode.length - 1];
35+
}
36+
}
37+
38+
39+
class WrongSolution {
40+
public int numDecodings(String s) {
41+
42+
char[] cArr = s.toCharArray();
43+
int[] decode = new int[cArr.length];
44+
45+
if((cArr[0] - 48) == 0) {
46+
return 0;
47+
}
48+
49+
decode[0] = 1;
50+
51+
// ์œ ํšจํ•œ ๊ฒฝ์šฐ๋งŒ ํŒ๋‹จํ•ด์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๋ฉด ๋์—ˆ๋˜ ๋ฌธ์ œ..
52+
// ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผํ• ์ง€ ๋ชจ๋ฅด๊ฒ ๋Š” ๋ถ„๊ธฐ๋Š” ์ฒ˜๋ฆฌํ•˜์ง€ ์•Šํ•˜๋А๋‹ˆ๋งŒ ๋ชปํ•˜๋‹ค...ใ…œ
53+
for(int i = 1; i < cArr.length; i++) {
54+
int cur = (int) cArr[i] - 48;
55+
int prev = (int) cArr[i - 1] - 48;
56+
57+
if(cur == prev && cur == 0) return 0;
58+
59+
String temp = "" + cArr[i - 1] + cArr[i];
60+
int tempI = Integer.parseInt(temp);
61+
62+
if(cur >= 1 && cur <= 9) {
63+
decode[i] = decode[i - 1];
64+
65+
if(prev >= 1 && prev <= 9) {
66+
if(tempI >= 1 && tempI <= 26) {
67+
decode[i] = i == 1 ? decode[i - 1] + 1 : decode[i - 1] + decode[i - 2];
68+
}
69+
} else { // ์ด์ „๊ฐ’์ด 0์ด๋ผ ์ •์ƒ์ ์ธ ๋””์ฝ”๋”ฉ์ด ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ..
70+
decode[i]--;
71+
}
72+
73+
} else { // ๋’ท ์ˆซ์ž์™€ ํ•ฉ์ณ์ ธ์„œ ์œ ํšจํ•˜๊ฒŒ ๋  ์ˆ˜๋„ ์žˆ๋Š”๊ฒฝ์šฐ
74+
decode[i] = (tempI >= 1 && tempI <= 26) ? decode[i - 1] : 0;
75+
}
76+
}
77+
78+
return decode[decode.length - 1];
79+
}
80+
}
+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// NOTE: ์นด๋ฐ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜
2+
// TODO: O(n^2) ๋ณต์žก๋„์˜ ๋ธŒ๋ฃจํŠธํฌ์Šค ๋ฐฉ์‹์œผ๋กœ๋„ ํ’€์–ด๋ณด๊ธฐ.
3+
class Solution {
4+
public int maxSubArray(int[] nums) {
5+
6+
int maxSum = nums[0];
7+
int curSum = nums[0];
8+
9+
for (int i = 1; i < nums.length; i++) {
10+
curSum = Math.max(nums[i], curSum + nums[i]);
11+
maxSum = Math.max(maxSum, curSum);
12+
}
13+
14+
return maxSum;
15+
}
16+
}
17+
18+
// NOTE: ์‹œ์ž‘์  ๋ณ€๊ฒฝ์˜ ์กฐ๊ฑด(?)์„ ์ œ๋Œ€๋กœ ์ •์˜ํ•˜์ง€ ๋ชปํ•ด ํ‹€๋ฆฐ๋ฌธ์ œ..
19+
// ๋‹ต์ง€ ๋ณด๊ณ  ํ•ด๊ฒฐ....
20+
class WrongSolution {
21+
public int maxSubArray(int[] nums) {
22+
int gMax = -123456789;
23+
int curMax = -123456789;
24+
int curSum = 0;
25+
26+
for(int i = 0; i < nums.length; i++) {
27+
if(curMax < nums[i]) {
28+
// ์‹œ์ž‘์  ๋ณ€๊ฒฝ.
29+
curSum = nums[i];
30+
curMax = nums[i];
31+
} else {
32+
curSum += nums[i];
33+
curMax = Math.max(curMax, curSum);
34+
}
35+
36+
gMax = Math.max(gMax, curMax);
37+
}
38+
39+
return gMax;
40+
}
41+
42+
}
+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// NOTE: 10์ง„์ˆ˜๋ฅผ 2 ์ง„์ˆ˜๋กœ ๋ณ€ํ™˜
2+
// O(logN)
3+
class Solution {
4+
public int hammingWeight(int n) {
5+
int oneCnt = 0;
6+
7+
while(n >= 1) {
8+
if((n % 2) == 1) {
9+
oneCnt++;
10+
}
11+
n = n / 2;
12+
}
13+
14+
return oneCnt;
15+
}
16+
}
+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
2+
// NOTE: ํŒฐ๋ฆฐ๋“œ๋กฌ์€ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž์™€ "์ˆซ์ž" ๊นŒ์ง€ ํฌํ•จํ•˜๋Š”๋“ฏ ํ•˜๋‹ค.
3+
// O(n) ์•Œ๊ณ ๋ฆฌ์ฆ˜.
4+
import java.util.stream.Collectors;
5+
6+
class Solution {
7+
public boolean isPalindrome(String s) {
8+
9+
String filtered = s.chars()
10+
.filter(Character::isLetterOrDigit)
11+
.mapToObj(c -> String.valueOf((char) c))
12+
.map(String::toLowerCase)
13+
.collect(Collectors.joining());
14+
15+
char[] cArr = filtered.toCharArray();
16+
17+
int startIdx = 0;
18+
int endIdx = cArr.length - 1;
19+
20+
while(startIdx < endIdx) {
21+
if(cArr[startIdx] != cArr[endIdx]) {
22+
return false;
23+
}
24+
25+
startIdx++;
26+
endIdx--;
27+
}
28+
29+
return true;
30+
}
31+
}

0 commit comments

Comments
ย (0)