Skip to content

Commit 7f9b0b8

Browse files
authored
Merge pull request #2074 from geegong/main
[geegong] WEEK 02 solutions
2 parents 34d52a1 + e2840cc commit 7f9b0b8

File tree

3 files changed

+103
-26
lines changed

3 files changed

+103
-26
lines changed

climbing-stairs/Geegong.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
public class Geegong {
2+
3+
/**
4+
* time complexity : O(N)
5+
* space complexity : O(N)
6+
* @param n
7+
* @return
8+
*/
9+
public int climbStairs(int n) {
10+
// 계단 n step 까지의 방법의 수는 f(n-1) + f(n-2)
11+
// f(n-1) 은 한칸 전 , f(n-2)는 2칸 전
12+
int[] dp = new int[46];
13+
dp[1] = 1;
14+
dp[2] = 2;
15+
16+
17+
for(int index=3; index<n; index++) {
18+
// (dp[index-1] + 한칸 더)의 방법의 수 + (dp[index-2] + 두칸 더)의 방법의 수
19+
dp[index] = dp[index-1] + dp[index-2];
20+
}
21+
22+
return dp[n];
23+
}
24+
25+
}

product-of-array-except-self/Geegong.java

Lines changed: 49 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ public class Geegong {
44

55
/**
66
* Time complexity : O(n)
7-
* Space complexity : O(1) (except result)
7+
* Space complexity : O(n) (except result)
88
*
99
* 풀이 : prefix array , suffix array 를 각 배열마다 구하여 각 array에 해당되는 인덱스의 값들을 곱하여 결과값을 도출
1010
*
@@ -13,38 +13,61 @@ public class Geegong {
1313
*/
1414
public int[] productExceptSelf(int[] nums) {
1515

16-
int[] result = new int[nums.length];
17-
18-
// 1. result 는 먼저 prefix 배열들의 곱으로 채운다.
19-
// ( prefix 배열이란 해당되는 index 이전의 배열요소값들을 의미)
16+
int[] prefixProductArr = new int[nums.length];
17+
int[] suffixProductArr = new int[nums.length];
2018

21-
// 앞에서부터 누적되는 총 곱의 값
22-
int accumulatedProduct = 1;
23-
for (int index=0; index<nums.length; index++) {
24-
if (index == 0) {
25-
result[index] = 1;
26-
continue;
27-
}
28-
29-
result[index] = accumulatedProduct * nums[index - 1];
30-
accumulatedProduct = result[index];
19+
prefixProductArr[0] = 1;
20+
prefixProductArr[1] = nums[0];
21+
for (int index=2; index<nums.length; index++) {
22+
prefixProductArr[index] = nums[index - 1] * prefixProductArr[index - 1];
3123
}
3224

33-
// 2. 배열의 뒤에서부터 product of suffix 값은 result 배열 하나하나에 대체한다.
34-
35-
// nums 배열 안에서 뒤에서부터 누적되는 총 곱의 값
36-
accumulatedProduct = 1;
37-
for (int index=nums.length - 1; index >= 0; index--) {
38-
if (index == nums.length - 1) {
39-
accumulatedProduct = nums[index];
40-
continue;
41-
}
25+
suffixProductArr[nums.length - 1] = 1;
26+
suffixProductArr[nums.length - 2] = nums[nums.length - 1];
27+
for (int index=nums.length - 3; index>=0; index--) {
28+
suffixProductArr[index] = nums[index + 1] * suffixProductArr[index + 1];
29+
}
4230

43-
result[index] = result[index] * accumulatedProduct;
44-
accumulatedProduct = accumulatedProduct * nums[index];
31+
int[] result = new int[nums.length];
32+
for (int index=0; index<nums.length; index++) {
33+
result[index] = prefixProductArr[index] * suffixProductArr[index];
4534
}
4635

4736
return result;
37+
38+
// 아래는 예전 기수에서 풀었떤 풀이 방법
39+
// int[] result = new int[nums.length];
40+
//
41+
// // 1. result 는 먼저 prefix 배열들의 곱으로 채운다.
42+
// // ( prefix 배열이란 해당되는 index 이전의 배열요소값들을 의미)
43+
//
44+
// // 앞에서부터 누적되는 총 곱의 값
45+
// int accumulatedProduct = 1;
46+
// for (int index=0; index<nums.length; index++) {
47+
// if (index == 0) {
48+
// result[index] = 1;
49+
// continue;
50+
// }
51+
//
52+
// result[index] = accumulatedProduct * nums[index - 1];
53+
// accumulatedProduct = result[index];
54+
// }
55+
//
56+
// // 2. 배열의 뒤에서부터 product of suffix 값은 result 배열 하나하나에 대체한다.
57+
//
58+
// // nums 배열 안에서 뒤에서부터 누적되는 총 곱의 값
59+
// accumulatedProduct = 1;
60+
// for (int index=nums.length - 1; index >= 0; index--) {
61+
// if (index == nums.length - 1) {
62+
// accumulatedProduct = nums[index];
63+
// continue;
64+
// }
65+
//
66+
// result[index] = result[index] * accumulatedProduct;
67+
// accumulatedProduct = accumulatedProduct * nums[index];
68+
// }
69+
//
70+
// return result;
4871
}
4972

5073
}

valid-anagram/Geegong.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import java.util.HashMap;
2+
import java.util.Map;
3+
4+
public class Geegong {
5+
6+
public boolean isAnagram(String s, String t) {
7+
char[] sArray = s.toCharArray()
8+
char[] tArray = t.toCharArray();
9+
10+
// early return
11+
if (sArray.length != tArray.length) {
12+
return false;
13+
}
14+
15+
Map<Character, Integer> numOfLetters = new HashMap<>();
16+
for (Character sLetter : sArray) {
17+
numOfLetters.merge(sLetter, 1, Integer::sum);
18+
}
19+
20+
for (Character tLetter : tArray) {
21+
Integer num = numOfLetters.get(tLetter);
22+
if (num <= 0) return false;
23+
numOfLetters.computeIfPresent(tLetter, (key, oldValue) -> oldValue - 1);
24+
}
25+
26+
return true;
27+
}
28+
29+
}

0 commit comments

Comments
 (0)