File tree 3 files changed +152
-0
lines changed
3 files changed +152
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number[] } nums
3
+ * @return {number[][] }
4
+ *
5
+ * 문제: 세 수를 더해서 0을 만들어야함.
6
+ *
7
+ * 주의사항: 인덱스 상관없어 세 수의 조합이 같으면 안됨.
8
+ * 핵심: 배열을 오름차순으로 정렬해서
9
+ * 양 끝에 각 인덱스넣고 사이에 있는인덱스로 계속 더하면서
10
+ * 좌우 인덱스를 0에 가깝게 +- 하면된다~
11
+ *
12
+ */
13
+ var threeSum = function ( nums ) {
14
+ // 결과를 저장할 배열
15
+ let result = [ ] ;
16
+ // 주어진 수를 오름차순으로 정렬
17
+ nums . sort ( ( a , b ) => a - b ) ;
18
+
19
+ for ( let i = 0 ; i < nums . length ; i ++ ) {
20
+ // nums[i] > 0보다 크다면? 반복 끝
21
+ if ( nums [ i ] > 0 ) {
22
+ break ;
23
+ }
24
+
25
+ let j = i + 1 ; // 중간에서 바뀔 인덱스
26
+ let k = nums . length - 1 ; // 맨 마지막에서 부터 움직일 인덱스
27
+
28
+ while ( j < k ) {
29
+ let sum = nums [ i ] + nums [ j ] + nums [ k ] ;
30
+
31
+ // 총합이 양수라면 k인덱스 한칸뒤로 ㄱ
32
+ if ( sum > 0 ) {
33
+ k -- ;
34
+ }
35
+ // 음수라면 j진행 ㄱ
36
+ else if ( sum < 0 ) {
37
+ j ++ ;
38
+ }
39
+ // 0이면 result배열에 추가, j진행
40
+ else {
41
+ result . push ( [ nums [ i ] , nums [ j ] , nums [ k ] ] ) ;
42
+ j ++ ;
43
+
44
+ // j가 이전값과 같다면 무시하고 진행하기
45
+ while ( nums [ j ] === nums [ j - 1 ] && j < k ) {
46
+ j ++ ;
47
+ }
48
+ }
49
+ }
50
+ }
51
+
52
+ return result ;
53
+
54
+ } ;
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number } n
3
+ * @return {number }
4
+ */
5
+ var climbStairs = function ( n ) {
6
+ // n+1 배열을 만들고 0으로 초기화
7
+ const dp = new Array ( n + 1 ) . fill ( 0 ) ;
8
+
9
+ // 인덱스 0번과 1번은 1로 초기화
10
+ dp [ 0 ] = 1 ;
11
+ dp [ 1 ] = 1 ;
12
+
13
+ // 이전계단과 그 이전 계단의 합이 계단을 올라갈 수 있는 총합
14
+ for ( let i = 2 ; i <= n ; i ++ ) {
15
+ dp [ i ] = dp [ i - 1 ] + dp [ i - 2 ] ;
16
+ }
17
+
18
+ return dp [ n ] ;
19
+ } ;
20
+
21
+ console . log ( climbStairs ( 5 ) ) ;
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {string } s
3
+ * @param {string } t
4
+ * @return {boolean }
5
+ *
6
+ */
7
+
8
+ var isAnagram = function ( s , t ) {
9
+ // 두 문자열의 길이가 같지않다면 false
10
+ if ( s . length !== t . length ) {
11
+ return false ;
12
+ } ;
13
+
14
+ // Map을 사용해서 데이터 최신화
15
+ let count = new Map ( ) ;
16
+
17
+ // set으로 해당 문자를 key, 갯수를 value로 카운트
18
+ for ( let char of s ) {
19
+ count . set ( char , ( count . get ( char ) || 0 ) + 1 )
20
+ }
21
+
22
+ for ( let char of t ) {
23
+ // 새로운 문자가 map에 없거나, 이미 카운트가 0이라면 false
24
+ if ( ! count . has ( char ) || count . get ( char ) === 0 ) {
25
+ return false ;
26
+ }
27
+ // 문자 카운트 -1
28
+ count . set ( char , ( count . get ( char ) - 1 ) )
29
+ }
30
+
31
+ return true ;
32
+ }
33
+
34
+ /*
35
+ * 문제: 두 문자열의 구성요소 비교
36
+ *
37
+ * 생각: 각 문자열에 상대 문자열의 스펠링이 있는지 확인하고 splice로 제거
38
+ * 결과: 타임리밋
39
+ var isAnagram = function (s, t) {
40
+ if (s.length !== t.length) {
41
+ return false;
42
+ };
43
+
44
+ let sArr = [];
45
+ let tArr = [];
46
+ let finder = 0;
47
+
48
+ for (let j = 0; j < s.length; j++) {
49
+ sArr.push(s[j]);
50
+ tArr.push(t[j]);
51
+ }
52
+
53
+ // 반복문을 돌며 s와 t를 비교
54
+ for (let i = 0; i < s.length; i++) {
55
+ //s[i]번 째가 t안에 있다면?
56
+ if (tArr.indexOf(sArr[0]) !== -1) {
57
+ // 찾은 인덱스를 저장해 줌 -> sArr 에서 splice먼저해버리면 배열이 달라져서 못찾음;;
58
+ finder = tArr.indexOf(sArr[0]);
59
+ //s[i]를 스플라이스로 빼고
60
+ sArr.splice(0, 1);
61
+ //t의 인덱스번호를 슬라이스로 뺌
62
+ tArr.splice(finder, 1);
63
+ }
64
+ console.log(i);
65
+ console.log(sArr);
66
+ console.log(tArr);
67
+ }
68
+
69
+ // s와 t의 길이가 0이면 true 아니면 fales
70
+ if (sArr.length === 0 && tArr.length === 0) {
71
+ return true;
72
+ }
73
+ else return false
74
+
75
+ };
76
+
77
+ */
You can’t perform that action at this time.
0 commit comments