Skip to content

Commit b36b5ea

Browse files
authored
Merge pull request #401 from jaejeong1/main
[jaejeong1] WEEK 03 Solutions
2 parents b37dc9d + 3013ae5 commit b36b5ea

File tree

3 files changed

+99
-0
lines changed

3 files changed

+99
-0
lines changed

โ€Žclimbing-stairs/jaejeong1.java

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
class SolutionClimbStairs {
2+
3+
public int climbStairs(int n) {
4+
// n๋ฒˆ์งธ ๊ณ„๋‹จ๊นŒ์ง€ ์˜ค๋ฅด๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜
5+
// ์ฒซ ๋ฒˆ์งธ ๊ณ„๋‹จ๊นŒ์ง€ ์˜ค๋ฅด๋Š” ๋ฐฉ๋ฒ•์€ 1๊ฐ€์ง€
6+
// ๋‘ ๋ฒˆ์งธ ๊ณ„๋‹จ๊นŒ์ง€ ์˜ค๋ฅด๋Š” ๋ฐฉ๋ฒ•์€ 2๊ฐ€์ง€
7+
// ์„ธ ๋ฒˆ์งธ ๊ณ„๋‹จ๋ถ€ํ„ฐ๋Š” ์ด์ „ ๋‘ ๊ณ„๋‹จ์˜ ๋ฐฉ๋ฒ•์„ ๋”ํ•˜์—ฌ ๊ณ„์‚ฐ
8+
// stairs[i]๋Š” i๋ฒˆ์งธ ๊ณ„๋‹จ๊นŒ์ง€ ์˜ค๋ฅด๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜
9+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(N), ๊ณต๊ฐ„๋ณต์žก๋„: O(N)
10+
if (n == 1) {
11+
return 1;
12+
}
13+
14+
if (n == 2) {
15+
return 2;
16+
}
17+
18+
int[] stairs = new int[n+1];
19+
stairs[1] = 1;
20+
stairs[2] = 2;
21+
22+
23+
for (int i=3; i<=n; i++) {
24+
stairs[i] = stairs[i-1] + stairs[i-2];
25+
}
26+
27+
return stairs[n];
28+
}
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
class SolutionProductExceptSelf {
2+
3+
public int[] productExceptSelf(int[] nums) {
4+
// answer[i] = nums[0] * nums[1] * ... * nums[i-1] * nums[i+1] * ... * nums[n-1]
5+
// answer[i] = left[i] * right[i]
6+
// left[i] = nums[0] * nums[1] * ... * nums[i-1]
7+
// right[i] = nums[i+1] * ... * nums[n-1]
8+
// left[i] = left[i-1] * nums[i-1]
9+
// right[i] = right[i+1] * nums[i+1]
10+
// answer[i] = left[i] * right[i]
11+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(N), ๊ณต๊ฐ„๋ณต์žก๋„: O(N)
12+
int n = nums.length;
13+
int[] left = new int[n];
14+
int[] right = new int[n];
15+
int[] answer = new int[n];
16+
17+
left[0] = 1;
18+
right[n - 1] = 1;
19+
20+
for (int i = 1; i < n; i++) {
21+
left[i] = left[i - 1] * nums[i - 1];
22+
}
23+
24+
for (int i = n - 2; i >= 0; i--) {
25+
right[i] = right[i + 1] * nums[i + 1];
26+
}
27+
28+
for (int i = 0; i < n; i++) {
29+
answer[i] = left[i] * right[i];
30+
}
31+
32+
return answer;
33+
}
34+
}

โ€Žtwo-sum/jaejeong1.java

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import java.util.ArrayList;
2+
import java.util.HashMap;
3+
import java.util.List;
4+
5+
class SolutionTwoSum {
6+
public int[] twoSum(int[] nums, int target) {
7+
// ๋ชจ๋“  ์ˆ˜๋ฅผ ํ•ด์‹œ๋งต์— ์ €์žฅํ•œ๋‹ค. key = nums[i], value = i
8+
// ํ•ด์‹œ๋งต์„ ์ˆœํšŒํ•˜๋ฉฐ target - key = result๋ฅผ ๋งŒ์กฑํ•˜๋Š” ์Œ์„ ์ฐพ์Œ
9+
// key ์™€ result ์˜ value๋ฅผ ์ •๋‹ต์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค
10+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(N), ๊ณต๊ฐ„๋ณต์žก๋„: O(N)
11+
// ๊ฐ’๋ณ„ ์ธ๋ฑ์Šค ๋ฆฌ์ŠคํŠธ๋ฅผ ์ €์žฅํ•  ํ•ด์‹œ๋งต
12+
HashMap<Integer, List<Integer>> indicesByValue = new HashMap<>();
13+
14+
for (int i = 0; i < nums.length; i++) {
15+
indicesByValue.computeIfAbsent(nums[i], k -> new ArrayList<>()).add(i);
16+
}
17+
18+
for (int key : indicesByValue.keySet()) {
19+
int diff = target - key;
20+
21+
if (indicesByValue.containsKey(diff)) {
22+
int index1 = indicesByValue.get(key).get(0);
23+
24+
// ๋™์ผํ•œ ๊ฐ’์— ๋Œ€ํ•ด ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
25+
int index2 = (key == diff && indicesByValue.get(key).size() > 1)
26+
? indicesByValue.get(key).get(1)
27+
: indicesByValue.get(diff).get(0);
28+
29+
return new int[]{index1, index2};
30+
}
31+
}
32+
33+
// ์Œ์„ ์ฐพ์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ
34+
return null;
35+
}
36+
}

0 commit comments

Comments
ย (0)