File tree Expand file tree Collapse file tree 2 files changed +142
-0
lines changed
Expand file tree Collapse file tree 2 files changed +142
-0
lines changed Original file line number Diff line number Diff line change 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+
Original file line number Diff line number Diff line change 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+
You can’t perform that action at this time.
0 commit comments