diff --git a/container-with-most-water/limlimjo.js b/container-with-most-water/limlimjo.js new file mode 100644 index 000000000..b5abc2acb --- /dev/null +++ b/container-with-most-water/limlimjo.js @@ -0,0 +1,29 @@ +/** + * @param {number[]} height + * @return {number} + */ +var maxArea = function (height) { + // Two Pointer를 이용해서 문제를 접근해야할 것 같은데 두 포인터 중에 어떤 거를 이동시켜야하는지 이 부분이 고민이 됨. + // 그래서 이 부분은 풀이 참고 + let maxArea = 0; + let start = 0, + end = height.length - 1; + + while (start < end) { + // 가로 * 세로 + let area = (end - start) * Math.min(height[start], height[end]); + + maxArea = Math.max(area, maxArea); + + // 고민했던 지점 + if (height[start] < height[end]) { + start++; + } else { + end--; + } + } + return maxArea; +}; + +// 시간복잡도: O(n) +// 공간복잡도: O(1) diff --git a/valid-parentheses/limlimjo.js b/valid-parentheses/limlimjo.js new file mode 100644 index 000000000..b0c8c9166 --- /dev/null +++ b/valid-parentheses/limlimjo.js @@ -0,0 +1,26 @@ +/** + * @param {string} s + * @return {boolean} + */ +var isValid = function (s) { + // 괄호 관리 스택 + const stack = []; + + // 여는 괄호, 닫는 괄호 매핑 + const brackets = { "(": ")", "{": "}", "[": "]" }; + + // for문 돌며 확인 + for (let i of s) { + // 여는 괄호일 경우 + if (brackets[i]) { + stack.push(brackets[i]); + // 닫는 괄호일 경우 + } else if (stack.length === 0 || i !== stack.pop()) { + return false; + } + } + return stack.length === 0; +}; + +// 시간복잡도: O(n) +// 공간복잡도: O(n)