diff --git a/longest-consecutive-sequence/hwanmini.js b/longest-consecutive-sequence/hwanmini.js new file mode 100644 index 000000000..880d7b2ae --- /dev/null +++ b/longest-consecutive-sequence/hwanmini.js @@ -0,0 +1,29 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var longestConsecutive = function(nums) { + if (nums.length === 0) return 0; + + const numSet = new Set(nums); + let maxSequenceLength = 0; + + for (const num of numSet) { + if (!numSet.has(num - 1)) { + let currentNum = num; + let currentLength = 1; + + while (numSet.has(currentNum + 1)) { + currentNum++; + currentLength++; + } + + maxSequenceLength = Math.max(maxSequenceLength, currentLength); + } + } + + return maxSequenceLength; +}; + +console.log(longestConsecutive([100, 4, 200, 1, 3, 2])); +console.log(longestConsecutive([0, 3, 7, 2, 5, 8, 4, 6, 0, 1])); diff --git a/missing-number/hwanmini.js b/missing-number/hwanmini.js new file mode 100644 index 000000000..23bdef4b6 --- /dev/null +++ b/missing-number/hwanmini.js @@ -0,0 +1,19 @@ +// 시간복잡도 O(n log n) +// 공간복잡도 O(n) + +/** + * @param {number[]} nums + * @return {number} + */ +var missingNumber = function(nums) { + nums.sort((a,b) => a - b); + + for (let i = 0 ; i <= nums.length; i++) { + if (i !== nums[i]) return i + } + +}; + +console.log(missingNumber([3, 0, 1])) +console.log(missingNumber([0, 1])) +console.log(missingNumber([9,6,4,2,3,5,7,0,1])) diff --git a/valid-palindrome/hwanmini.js b/valid-palindrome/hwanmini.js new file mode 100644 index 000000000..cad935a9a --- /dev/null +++ b/valid-palindrome/hwanmini.js @@ -0,0 +1,29 @@ +// 시간복잡도: O(n) +// 공간복잡도: O(n) + +/** + * @param {string} s + * @return {boolean} + */ +var isPalindrome = function(s) { + const strs = s.replace(/[^a-z0-9]/gi, '').toLowerCase(); + + let leftIdx = 0; + let rightIdx = strs.length - 1 + + while (leftIdx <= rightIdx) { + if (strs[leftIdx] !== strs[rightIdx]) return false + + leftIdx++ + rightIdx-- + } + + + return true +}; + +const s = "A man, a plan, a canal: Panama" + + +console.log(isPalindrome(s)) + diff --git a/word-search/hwanmini.js b/word-search/hwanmini.js new file mode 100644 index 000000000..8944bc1aa --- /dev/null +++ b/word-search/hwanmini.js @@ -0,0 +1,69 @@ + +// m은 board의 행 수, n은 board의 열 수, 4(상하좌우), l(word) + +// 시간복잡도: O(m * n * 4L) +// 공간복잡도: O(m * n) + +const d_row = [1, -1, 0, 0] +const d_col = [0, 0, -1, 1] + + +const isMoveBoard = (new_row, new_col, board) => { + return new_row >= 0 && new_row < board.length && new_col >= 0 && new_col < board[0].length +} + + +/** + * @param {character[][]} board + * @param {string} word + * @return {boolean} + */ +var exist = function(board, word) { + let result = false + + const visited = Array.from({length: board.length} , () => Array.from({length: board[0].length}).fill(false)) + + const dfs = (strs, row, col, count) => { + + if (strs[count] !== word[count]) return + if (strs.length > word.length) return + + if (strs === word) { + result = true + return + } + + for (let i = 0 ; i < d_row.length; i++) { + const new_row = row + d_row[i] + const new_col = col + d_col[i] + + if (isMoveBoard(new_row, new_col, board) && visited[new_row][new_col] !== true){ + visited[new_row][new_col] = true + dfs(strs+board[new_row][new_col], new_row, new_col, count+1) + visited[new_row][new_col] = false + } + } + + + + } + + + for (let row = 0 ; row < board.length ; row++) { + for (let col = 0 ; col < board[0].length ; col++) { + visited[row][col] = true + dfs(board[row][col], row, col , 0) + visited[row][col] = false + } + } + + + return result +}; + +console.log(exist([["A","B","C","E"], + ["S","F","C","S"], + ["A","D","E","E"]], "ABCCED")) +console.log(exist([["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], "SEE")) +console.log(exist([["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], "ABCB")) +