Skip to content

Commit 5613221

Browse files
committed
rivkode 3sum clibing-stairs
1 parent 777df01 commit 5613221

File tree

2 files changed

+142
-0
lines changed

2 files changed

+142
-0
lines changed

3sum/rivkode.java

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*
2+
1. 문제분석
3+
3개의 수를 더해서 0을 만들자
4+
5+
2. 예외 케이스
6+
7+
3. 알고리즘
8+
2포인터 활용
9+
10+
4. 구현
11+
12+
[-4, -1, -1, 0, 1, 2]
13+
14+
배열을 정렬하고 2개의 포인터를 잡은 뒤 더한 값의 -한 값이 배열 내에 존재하는지 체크
15+
배열의 i 값과 2개 포인터를 모두 더한 값이 음수라면 left를 우측으로 이동
16+
배열의 i 값과 2개 포인터를 모두 더한 값이 양수라면 right를 좌측으로 이동
17+
*/
18+
19+
import java.util.*;
20+
21+
class Solution {
22+
public List<List<Integer>> threeSum(int[] nums) {
23+
Arrays.sort(nums);
24+
Set<List<Integer>> set = new HashSet<>();
25+
26+
for (int i=0; i<nums.length; i++) {
27+
// target 변수 세팅
28+
int target = nums[i];
29+
int left = i+1;
30+
int right = nums.length - 1;
31+
32+
// left, right 포인터 서로 이동
33+
while (left < right) {
34+
int leftInt = nums[left];
35+
int rightInt = nums[right];
36+
37+
if ((target + leftInt + rightInt) == 0) {
38+
List<Integer> temp = new ArrayList<>();
39+
temp.add(target);
40+
temp.add(leftInt);
41+
temp.add(rightInt);
42+
43+
set.add(temp);
44+
45+
// 일치할 경우 해당 선택된 인덱스에 대해 추가로 확인하기 위해서 left, right 값 변경
46+
left += 1;
47+
right -= 1;
48+
} else if ((target + leftInt + rightInt) < 0) {
49+
left += 1;
50+
} else if ((target + leftInt + rightInt) > 0) {
51+
right -= 1;
52+
}
53+
}
54+
}
55+
56+
return set.stream().collect(Collectors.toList());
57+
}
58+
}
59+

climbing-stairs/rivkode.java

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/*
2+
이것도 dp 아닌가 ?
3+
이전의 계산들을 다음 계산에 사용할 수 있음
4+
메모이제이션과 dp를 사용하면 풀 수 있을 것 같은데
5+
dp 아니네
6+
7+
점화식
8+
9+
count(n) = count(n-1) +
10+
11+
만약 5를 만드려면
12+
3을 만드는 경우의 수와 2를 만드는 경우의 수를 곱하면 되는것 아닌가 ?
13+
14+
3을 만드려면 ?
15+
2를 만들 수 있는 경우의 수에 1을 만들 수 있는 경우의 수를 더해주면 되는거 아닌가 ?
16+
순서를 바꾸고 ?
17+
18+
111
19+
21
20+
12
21+
22+
1111
23+
211
24+
121
25+
112
26+
22
27+
28+
11111
29+
2111
30+
1211
31+
1121
32+
1112
33+
221
34+
212
35+
122
36+
37+
111111
38+
21111
39+
12111
40+
11211
41+
11121
42+
11112
43+
1122
44+
1212
45+
1221
46+
2211
47+
2121
48+
2112
49+
222
50+
51+
52+
53+
54+
1 - 1
55+
2 - 2
56+
3 - 3
57+
4 - 5
58+
5 - 8
59+
6 - 13
60+
61+
count(3) = coun(1) + count(2)
62+
count(4) = count(3) + count(2)
63+
64+
count(n) = count(n-1) + count(n-2)
65+
66+
*/
67+
68+
class Solution {
69+
public int climbStairs(int n) {
70+
// n은 45까지 있으므로 배열을 45까지 구하면 됨
71+
72+
int[] arr = new int[45];
73+
arr[0] = 1;
74+
arr[1] = 2;
75+
76+
for (int i=2; i<45; i++) {
77+
arr[i] = arr[i-1] + arr[i-2];
78+
}
79+
80+
return arr[n-1];
81+
}
82+
}
83+

0 commit comments

Comments
 (0)