From bb43597e06bc8e8908f34fdb6bebbc330a412867 Mon Sep 17 00:00:00 2001 From: "dd_._._bb" Date: Mon, 13 Jan 2025 09:06:14 +0900 Subject: [PATCH 1/4] chore: create a file --- valid-parentheses/lledellebell.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 valid-parentheses/lledellebell.ts diff --git a/valid-parentheses/lledellebell.ts b/valid-parentheses/lledellebell.ts new file mode 100644 index 000000000..e69de29bb From 8472ed5b0181c9a80fa1f377bc65f1d4a52ff0bd Mon Sep 17 00:00:00 2001 From: "dd_._._bb" Date: Mon, 13 Jan 2025 15:02:39 +0900 Subject: [PATCH 2/4] valid parentheses solution --- valid-parentheses/lledellebell.ts | 67 +++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/valid-parentheses/lledellebell.ts b/valid-parentheses/lledellebell.ts index e69de29bb..3627405d0 100644 --- a/valid-parentheses/lledellebell.ts +++ b/valid-parentheses/lledellebell.ts @@ -0,0 +1,67 @@ +/*** + * + * @problem + * - 여는 괄호와 닫는 괄호가 올바르게 짝을 이루는지 확인하는 문제입니다. + * + * @constraints + * - 문자열은 오직 '(', ')', '{', '}', '[', ']' 문자로만 구성됩니다. + * - 문자열의 길이는 0 이상 10^4 이하입니다. + * + * @example + * - 입력: "()" + * 출력: true + * - 입력: "(){}" + * 출력: true + * - 입력: "(]" + * 출력: false + * - 입력: "([)]" + * 출력: false + * - 입력: "{}" + * 출력: true + * + * @description + * - 여는 괄호는 스택에 추가하고, 닫는 괄호가 나오면 스택의 맨 위 요소(가장 최근에 추가된 여는 괄호)와 비교합니다. + * - 닫는 괄호와 스택의 맨 위 요소가 짝을 이루지 않으면 유효하지 않은 문자열로 판단합니다. + * - 문자열을 모두 순회한 후 스택이 비어 있으면 유효한 괄호 문자열입니다. + * + * @complexity + * - 시간 복잡도: O(n) + * 문자열을 한 번만 순회하므로 시간 복잡도는 O(n)입니다. + * - 공간 복잡도: O(n) + * 스택에 저장되는 여는 괄호의 최대 개수는 문자열 길이에 비례하므로 공간 복잡도는 O(n)입니다. + * + */ +function isValid(s: string): boolean { + // 괄호 쌍을 저장하는 Map 생성 + const map = new Map([ + [')', '('], + ['}', '{'], + [']', '['] + ]); + + // 스택 초기화 + const stack: string[] = []; + + // 문자열을 순회 + for (const char of s) { + if (map.has(char)) { + // 닫는 괄호일 경우 스택에서 pop하여 비교 + const topElement = stack.length > 0 ? stack.pop() : undefined; + if (topElement !== map.get(char)) { + return false; // 올바르지 않은 경우 + } + } else { + // 여는 괄호일 경우 스택에 push + stack.push(char); + } + } + + // 스택이 비어 있으면 유효한 괄호(모든 여는 괄호가 닫는 괄호와 짝을 이룸) + return stack.length === 0; +} + +console.log(isValid("()")); // true +console.log(isValid("(){}")); // true +console.log(isValid("(]")); // false +console.log(isValid("([)]")); // false +console.log(isValid("{[]}")); // true From c99f88a455ef6659210912ff1c9480d28178689f Mon Sep 17 00:00:00 2001 From: "dd_._._bb" Date: Tue, 14 Jan 2025 08:29:16 +0900 Subject: [PATCH 3/4] Container With Most Water solution --- container-with-most-water/lledellebell.ts | 39 +++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 container-with-most-water/lledellebell.ts diff --git a/container-with-most-water/lledellebell.ts b/container-with-most-water/lledellebell.ts new file mode 100644 index 000000000..83785b785 --- /dev/null +++ b/container-with-most-water/lledellebell.ts @@ -0,0 +1,39 @@ +/*** + * + * @problem + * - 배열에서 두 선을 선택하여 최대 물을 담을 수 있는 면적을 구하는 문제 + * + * @constraints + * - 배열의 길이는 2 이상 10^5 이하입니다. + * - 각 높이는 0 이상 10^4 이하의 정수입니다. + * + * @example + * - 입력: height = [1,8,6,2,5,4,8,3,7] + * - 출력: 49 + * (높이 8과 7을 선택하여 넓이 = min(8, 7) * (8 - 1) = 49) + * + * @description + * - 배열의 양 끝에서 시작하는 두 개의 포인터를 사용하여 문제를 해결합니다. + * - 현재 포인터 위치에서의 넓이를 계산하고 최대값을 갱신합니다. + * - 더 작은 높이를 가진 포인터를 이동하여 더 큰 넓이를 탐색합니다. + * + * @complexity + * - 시간 복잡도: O(n) + * (배열을 한 번만 순회하며 최대 넓이를 계산) + * - 공간 복잡도: O(1) + * (추가 메모리 사용 없이 포인터만 사용) + * + */ +function maxArea(height: number[]): number { + let left = 0, right = height.length - 1, maxArea = 0; + + while (left < right) { + // 현재 넓이 계산 및 최대값 갱신 + maxArea = Math.max(maxArea, Math.min(height[left], height[right]) * (right - left)); + + // 더 작은 높이의 포인터를 이동 + height[left] < height[right] ? left++ : right--; + } + + return maxArea; +} From d80e6961c7715aba84be8b1d2d2bcc9a82ba289a Mon Sep 17 00:00:00 2001 From: "dd_._._bb" Date: Tue, 14 Jan 2025 08:59:02 +0900 Subject: [PATCH 4/4] =?UTF-8?q?chore:=20=EC=A4=84=20=EB=B0=94=EA=BF=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- container-with-most-water/lledellebell.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/container-with-most-water/lledellebell.ts b/container-with-most-water/lledellebell.ts index 83785b785..7ec451c0d 100644 --- a/container-with-most-water/lledellebell.ts +++ b/container-with-most-water/lledellebell.ts @@ -25,7 +25,9 @@ * */ function maxArea(height: number[]): number { - let left = 0, right = height.length - 1, maxArea = 0; + let left = 0, + right = height.length - 1, + maxArea = 0; while (left < right) { // 현재 넓이 계산 및 최대값 갱신