diff --git a/container-with-most-water/HerrineKim.js b/container-with-most-water/HerrineKim.js new file mode 100644 index 000000000..d8e22eb57 --- /dev/null +++ b/container-with-most-water/HerrineKim.js @@ -0,0 +1,26 @@ +// 시간복잡도: O(n) +// 공간복잡도: O(1) + +/** + * @param {number[]} height + * @return {number} + */ +var maxArea = function (height) { + let maxWater = 0; + let left = 0; + let right = height.length - 1; + + while (left < right) { + const lowerHeight = Math.min(height[left], height[right]); + const width = right - left; + maxWater = Math.max(maxWater, lowerHeight * width); + + if (height[left] < height[right]) { + left++; + } else { + right--; + } + } + + return maxWater; +}; diff --git a/valid-parentheses/HerrineKim.js b/valid-parentheses/HerrineKim.js new file mode 100644 index 000000000..28a56c499 --- /dev/null +++ b/valid-parentheses/HerrineKim.js @@ -0,0 +1,33 @@ +// 시간복잡도: O(n) +// 공간복잡도: O(n) + +// 스택을 사용하여 괄호의 유효성을 검사 +// 괄호가 열리면 스택에 추가하고 닫히면 스택에서 마지막 요소를 꺼내서 짝이 맞는지 확인 +// 스택이 비어있으면 유효한 괄호 문자열 + +/** + * @param {string} s + * @return {boolean} + */ +var isValid = function (s) { + const bracketStack = []; + const bracketPairs = { + ')': '(', + '}': '{', + ']': '[' + }; + + for (const char of s) { + if (char in bracketPairs) { + const lastChar = bracketStack.pop(); + + if (lastChar !== bracketPairs[char]) { + return false; + } + } else { + bracketStack.push(char); + } + } + + return bracketStack.length === 0; +};