File tree Expand file tree Collapse file tree 5 files changed +100
-0
lines changed
longest-consecutive-sequence Expand file tree Collapse file tree 5 files changed +100
-0
lines changed Original file line number Diff line number Diff line change 1+ // NOTE: set을 사용해서 중복된 엘리먼트가 있는 경우 true 리턴
2+ function containsDuplicate ( nums : number [ ] ) : boolean {
3+ const set = new Set ( ) ;
4+ for ( const num of nums ) {
5+ if ( set . has ( num ) ) {
6+ return true ;
7+ }
8+ set . add ( num ) ;
9+ }
10+
11+ return false ;
12+ } ;
Original file line number Diff line number Diff line change 1+ function rob ( nums : number [ ] ) : number {
2+ // 시간 초과를 막기 위해 Memo 객체 추가
3+ const memo : Record < number , number > = { } ;
4+
5+ function dfs ( start : number ) : number {
6+ // memo에 저장된 값 있으면 사용
7+ if ( memo [ start ] != null ) {
8+ return memo [ start ] ;
9+ }
10+
11+ // 배열 벗어난 인덱스 접근이면 0리턴
12+ if ( start >= nums . length ) {
13+ return 0 ;
14+ }
15+
16+ // 현재 요소의 값과 하나 건너뛴 요소의 기대값 / 다음 요소의 기대값 중 더 큰 값을 사용
17+ memo [ start ] = Math . max ( nums [ start ] + dfs ( start + 2 ) , dfs ( start + 1 ) ) ;
18+ return memo [ start ] ;
19+ }
20+
21+ return dfs ( 0 ) ;
22+ } ;
Original file line number Diff line number Diff line change 1+ function longestConsecutive ( nums : number [ ] ) : number {
2+ const set = new Set ( nums ) ;
3+ let maxCount = 0 ;
4+
5+ for ( const num of set ) {
6+ // 시작 시점이 되는 숫자부터 시작.
7+ const isStart = ! set . has ( num - 1 ) ;
8+ if ( ! isStart ) continue ;
9+
10+ let count = 0 ;
11+ let _num = num ;
12+ while ( true ) {
13+ count += 1 ;
14+ const hasNext = set . has ( _num + 1 ) ;
15+
16+ // 다음 요소가 없을 때 까지 순회하다가 최대 카운트를 override
17+ if ( ! hasNext ) {
18+ maxCount = Math . max ( maxCount , count ) ;
19+ break ;
20+ }
21+
22+ // 한 번 사용한 숫자는 제거
23+ set . delete ( _num ) ;
24+ _num += 1 ;
25+ }
26+ }
27+
28+ return maxCount
29+ } ;
Original file line number Diff line number Diff line change 1+ function topKFrequent ( nums : number [ ] , k : number ) : number [ ] {
2+ // nums 순회하면서 각 숫자 개수 카운트
3+ const dict = nums . reduce ( ( acc : Record < number , number > , v ) => {
4+ if ( acc [ v ] != null ) {
5+ acc [ v ] += 1 ;
6+ } else {
7+ acc [ v ] = 1
8+ }
9+ return acc ;
10+ } , { } ) ;
11+
12+
13+ // 내림차순으로 정렬하고, k개 만큼 자르고 배열로 반환
14+ const result = Object . entries ( dict ) . sort ( ( a , b ) => b [ 1 ] - a [ 1 ] ) . slice ( 0 , k ) ;
15+ return result . map ( ( [ key ] ) => parseInt ( key ) ) ;
16+ } ;
Original file line number Diff line number Diff line change 1+ function twoSum ( nums : number [ ] , target : number ) : number [ ] {
2+ // hasTable을 생성
3+ const hashTable = nums . reduce ( ( acc , v , i ) => {
4+ acc [ v ] = i ;
5+ return acc ;
6+ } , { } ) ;
7+
8+
9+
10+ for ( const index of nums . keys ( ) ) {
11+ const v = nums [ index ] ;
12+ const remain = target - v ;
13+
14+ // target을 만들기 위해 필요한 값을 hashTable에서 조회하고 있으면 결과로 리턴
15+ if ( hashTable . hasOwnProperty ( remain ) && index !== hashTable [ remain ] ) {
16+ return [ index , hashTable [ remain ] ] ;
17+ }
18+ }
19+
20+ return [ ]
21+ } ;
You can’t perform that action at this time.
0 commit comments