diff --git a/maximum-subarray/YeomChaeeun.ts b/maximum-subarray/YeomChaeeun.ts new file mode 100644 index 000000000..ab0e24552 --- /dev/null +++ b/maximum-subarray/YeomChaeeun.ts @@ -0,0 +1,20 @@ +/** + * 연속되는 서브 배열로 최대 합을 구하기 + * 알고리즘 복잡도 + * - 시간 복잡도: O(n) + * - 공간 복잡도: O(1) + * @param nums + */ +function maxSubArray(nums: number[]): number { + if(nums.length === 1) return nums[0] + + let currentSum = nums[0] + let maxSum = nums[0] + for(let i = 1; i < nums.length; i++) { + currentSum = Math.max(nums[i], currentSum + nums[i]) + // 최대값 갱신 + maxSum = Math.max(maxSum, currentSum) + } + + return maxSum +} diff --git a/product-of-array-except-self/YeomChaeeun.ts b/product-of-array-except-self/YeomChaeeun.ts new file mode 100644 index 000000000..43f5e6ad7 --- /dev/null +++ b/product-of-array-except-self/YeomChaeeun.ts @@ -0,0 +1,47 @@ +/** + * 본인 인덱스에 있는 값을 제외한 모든 수의 곱 + * 알고리즘 복잡도 + * - 시간복잡도: O(n) + * - 공간복잡도: O(1) + * @param nums + */ +function productExceptSelf(nums: number[]): number[] { + let len = nums.length + let output = Array(len).fill(1) + + /* ex) [1, 2, 3, 4] + left >>> + i = 0 -> 1 = 1 + i = 1 -> 1 * 1 = 1 + i = 2 -> 1 * 1 * 2 = 2 + i = 3 -> 1 * 1 * 2 * 3 = 6 + */ + // 왼쪽부터 누적 곱 + let left = 1 + for (let i = 0; i < len; i++) { + output[i] *= left + left *= nums[i] + } + + /* + right >>> + i = 3 -> 1 = 1 + i = 2 -> 1 * 4 = 4 + i = 1 -> 1 * 4 * 3 = 12 + i = 3 -> 1 * 4 * 3 * 2 = 24 + + output >>> + i = 0 -> 1 * 24 = 24 + i = 1 -> 1 * 12 = 12 + i = 2 -> 2 * 4= 8 + i = 3 -> 6 * 1 = 6 + */ + // 오른쪽부터 누적 곱을 output 각 자리에 곱함 + let right = 1 + for (let i = len - 1; i >= 0; i--) { + output[i] *= right + right *= nums[i] + } + + return output +} diff --git a/reverse-bits/YeomChaeeun.ts b/reverse-bits/YeomChaeeun.ts new file mode 100644 index 000000000..70d7647ec --- /dev/null +++ b/reverse-bits/YeomChaeeun.ts @@ -0,0 +1,20 @@ +/** + * 정수를 비트로 변환후 뒤집어서 다시 정수로 반환 + * 알고리즘 복잡도 + * - 시간복잡도: O(1) + * - 공간복잡도: O(1) + * @param n + */ +function reverseBits(n: number): number { + // 2진수 배열로 변환 + let arr = n.toString(2).split('') + let len = arr.length + // 32비트 정렬 - 부족한 앞쪽에 0으로 채움 + for (let i = 0; i < (32 - len); i++) { + arr.unshift('0'); + } + // 뒤집은 후 합침 + let result = arr.reverse().join('') + // 2진수 정수로 변환하여 반환 + return parseInt(result,2) +} diff --git a/two-sum/YeomChaeeun.ts b/two-sum/YeomChaeeun.ts new file mode 100644 index 000000000..977134d44 --- /dev/null +++ b/two-sum/YeomChaeeun.ts @@ -0,0 +1,20 @@ +/** + * 배열 두 수의 합이 target 과 같은 값 + * 알고리즘 복잡도: + * - 시간복잡도: O(n^2) + * - 공간복잡도: O(1) + * @param nums + * @param target + */ +function twoSum(nums: number[], target: number): number[] { + let result: number[] = []; + + for(let i = 0; i < nums.length; i++) { + for(let j = i + 1; j < nums.length; j++) { + if(nums[i] + nums[j] === target) { + result.push(i, j); + return result; + } + } + } +}