File tree Expand file tree Collapse file tree 3 files changed +152
-0
lines changed Expand file tree Collapse file tree 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