File tree Expand file tree Collapse file tree 3 files changed +69
-0
lines changed Expand file tree Collapse file tree 3 files changed +69
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * 동전들로 금액을 만들때 필요한 최소 동전의 개수 찾기
3
+ * 알고리즘 복잡도
4
+ * - 시간 복잡도: O(nxm) 동전의 개수 x 만들어야하는 금액의 크기
5
+ * - 공간 복잡도: O(m) 주어진 금액에 비례함
6
+ * @param coins
7
+ * @param amount
8
+ */
9
+ function coinChange ( coins : number [ ] , amount : number ) : number {
10
+ const dp = new Array ( amount + 1 ) . fill ( amount + 1 )
11
+ dp [ 0 ] = 0 // 0원은 0개
12
+
13
+ for ( const coin of coins ) {
14
+ for ( let i = coin ; i <= amount ; i ++ ) {
15
+ dp [ i ] = Math . min ( dp [ i ] , dp [ i - coin ] + 1 )
16
+ }
17
+ }
18
+
19
+ return dp [ amount ] === amount + 1 ? - 1 : dp [ amount ]
20
+ }
Original file line number Diff line number Diff line change
1
+ /**
2
+ * Definition for singly-linked list.
3
+ * class ListNode {
4
+ * val: number
5
+ * next: ListNode | null
6
+ * constructor(val?: number, next?: ListNode | null) {
7
+ * this.val = (val===undefined ? 0 : val)
8
+ * this.next = (next===undefined ? null : next)
9
+ * }
10
+ * }
11
+ */
12
+ /**
13
+ * 두개의 리스트 정렬 - 재귀 알고리즘으로 접근
14
+ * 알고리즘 복잡도
15
+ * - 시간 복잡도: O(n+m) - 모든 노드를 한 번씩 들르기 때문
16
+ * - 공간 복잡도: O(n+m) - 함수 호출 스택이 재귀 호출로 인해 사용하기 때문
17
+ * @param list1
18
+ * @param list2
19
+ */
20
+ function mergeTwoLists ( list1 : ListNode | null , list2 : ListNode | null ) : ListNode | null {
21
+ if ( ! ( list1 && list2 ) ) return list1 || list2
22
+ if ( list1 . val < list2 . val ) {
23
+ list1 . next = mergeTwoLists ( list1 . next , list2 ) ;
24
+ return list1
25
+ } else {
26
+ list2 . next = mergeTwoLists ( list2 . next , list1 ) ;
27
+ return list2
28
+ }
29
+ }
Original file line number Diff line number Diff line change
1
+ /**
2
+ * 주어진 배열의 중간에 없는 숫자 찾기
3
+ * 알고리즘 복잡도
4
+ * - 시간 복잡도: O(nlogn)
5
+ * - 공간 복잡도: O(1)
6
+ * @param nums
7
+ */
8
+ function missingNumber ( nums : number [ ] ) : number {
9
+ if ( nums . length === 1 ) {
10
+ return nums [ 0 ] === 0 ? 1 : 0
11
+ }
12
+
13
+ nums . sort ( ( a , b ) => a - b )
14
+
15
+ for ( let i = 0 ; i < nums . length ; i ++ ) {
16
+ if ( nums [ 0 ] !== 0 ) return 0
17
+ if ( nums [ i ] + 1 !== nums [ i + 1 ] )
18
+ return nums [ i ] + 1
19
+ }
20
+ }
You can’t perform that action at this time.
0 commit comments