diff --git a/3sum/jdy8739.js b/3sum/jdy8739.js new file mode 100644 index 000000000..0114b8ab3 --- /dev/null +++ b/3sum/jdy8739.js @@ -0,0 +1,45 @@ +/** + * @param {number[]} nums + * @return {number[][]} + */ +var threeSum = function(nums) { + const answer = []; + + const sorted = nums.sort((a, b) => a - b); + + for (let i=0; i 0 && sorted[i] === sorted[i - 1]) { + // 위 조건으로 중복 숫자 필터 + continue; + } + + let l = i + 1; + let h = sorted.length - 1; + + while (l < h) { + const sum = sorted[i] + sorted[l] + sorted[h]; + + if (sum === 0) { + const arr = [sorted[i], sorted[l], sorted[h]]; + answer.push(arr); + + // 아래 반복문으로 중복 숫자 필터 + while (l < h && sorted[l] === sorted[l + 1]) l++; + while (l < h && sorted[h] === sorted[h - 1]) h--; + + h--; + l++; + } + + if (sum > 0) h--; + if (sum < 0) l++; + } + } + + return answer; +}; + +// TC: O(n2) +// SC: O(1) + + diff --git a/climbing-stairs/jdy8739.js b/climbing-stairs/jdy8739.js new file mode 100644 index 000000000..4778639ab --- /dev/null +++ b/climbing-stairs/jdy8739.js @@ -0,0 +1,22 @@ +/** + * @param {number} n + * @return {number} + */ +var climbStairs = function(n) { + let first = 1; + let second = 2; + + if (n <= 2) { + return n; + } + + for (let i=2; i { + const arr = s.split(''); + + const dict = {}; + + for (let i=0; i { + return Object.keys(dictA).length === Object.keys(dictB).length +} + +const checkSameDict = (s, t) => { + for (const key in s) { + if (s[key] !== t[key]) { + return false; + } + } + + return true; +} + +/** + * @param {string} s + * @param {string} t + * @return {boolean} + */ +var isAnagram = function(s, t) { + const dictA = getDictionary(s); + + const dictB = getDictionary(t); + + return checkSameLength(dictA, dictB) && checkSameDict(dictA, dictB); +}; + +// 공간복잡도: 해시 테이블에 모든 문자를 저장하게 되므로 O(n) +// 시간복잡도: 두 개의 문자열을 한 번씩 루프를 돌고 있기 때문에 0(n) +