diff --git a/container-with-most-water/YeomChaeeun.ts b/container-with-most-water/YeomChaeeun.ts
new file mode 100644
index 000000000..b058ba0e7
--- /dev/null
+++ b/container-with-most-water/YeomChaeeun.ts
@@ -0,0 +1,33 @@
+/**
+ * 배열의 두개의 높이를 가지고 최대 용량을 구하기
+ * 알고리즘 복잡도
+ * - 시간 복잡도: O(n)
+ * - 공간 복잡도: O(1)
+ * @param height
+ */
+function maxArea(height: number[]): number {
+    // end - start * min(height[start], height[end])가 큰 것
+
+    // 8 - 0 * min(1, 7) = 8
+    // 8 - 1 * min(8, 7) = 49
+    // 7 - 1 * min(8, 3) = 18
+    // 6 - 1 * min(8, 8) = 40
+    // ...
+
+    let s = 0
+    let e = height.length - 1
+    let curr = 0
+    let max = 0
+
+    while(s < e) {
+        curr = (e - s) * Math.min(height[s], height[e])
+        max = Math.max(curr, max)
+        if(height[s] < height[e]){
+            s += 1
+        } else {
+            e -= 1
+        }
+    }
+
+    return max
+}
diff --git a/longest-increasing-subsequence/YeomChaeeun.ts b/longest-increasing-subsequence/YeomChaeeun.ts
new file mode 100644
index 000000000..ab0039a57
--- /dev/null
+++ b/longest-increasing-subsequence/YeomChaeeun.ts
@@ -0,0 +1,26 @@
+/**
+ * 주어진 배열에서 가장 긴 부분 수열의 길이 구하기
+ * 달고알레 풀이를 참고하여 동적 프로그래밍 적용했습니다
+ * 알고리즘 복잡도
+ * - 시간 복잡도: O(n2)
+ * - 공간 복잡도: O(n)
+ * @param nums
+ */
+function lengthOfLIS(nums: number[]): number {
+    // dp 배열을 1로 초기화 - 각 숫자 단독의 기본 길이는 1임
+    const dp: number[] = new Array(nums.length).fill(1)
+    let maxLength = 1
+
+    for (let i = 1; i < nums.length; i++) {
+        // 현재 위치(i) 이전의 모든 원소들을 확인
+        for (let j = 0; j < i; j++) {
+            // 현재 숫자가 이전 숫자보다 큰 경우 - 부분 수열이 가능하다는 것
+            if (nums[i] > nums[j]) {
+                dp[i] = Math.max(dp[i], dp[j] + 1)
+            }
+        }
+        maxLength = Math.max(maxLength, dp[i])
+    }
+
+    return maxLength
+}
diff --git a/spiral-matrix/YeomChaeeun.ts b/spiral-matrix/YeomChaeeun.ts
new file mode 100644
index 000000000..f62dfdb85
--- /dev/null
+++ b/spiral-matrix/YeomChaeeun.ts
@@ -0,0 +1,43 @@
+/**
+ * 달팽이 알고리즘
+ * 알고리즘 복잡도
+ * - 시간 복잡도: O(n) - 모든 행렬의 원소의 수 (rows * columns)
+ * - 공간 복잡도: O(n) - 결과 저장을 위한 배열
+ * @param matrix
+ */
+function spiralOrder(matrix: number[][]): number[] {
+    // 정처기 단골 문제였던 기억이..
+    const result: number[] = [];
+    let top = 0
+    let bottom = matrix.length - 1;
+    let left = 0
+    let right = matrix[0].length - 1;
+
+    while(top <= bottom && left <= right) { // 순환 조건
+        for(let i = left; i <= right; i++) {
+            result.push(matrix[top][i])
+        }
+        top++
+
+        for(let i = top; i <= bottom; i++) {
+            result.push(matrix[i][right])
+        }
+        right--
+
+        if(top <= bottom) {
+            for(let i = right; i >= left; i--) {
+                result.push(matrix[bottom][i])
+            }
+            bottom--
+        }
+
+        if(left <= right) {
+            for(let i = bottom; i >= top; i--) {
+                result.push(matrix[i][left])
+            }
+            left++
+        }
+    }
+
+    return result
+}
diff --git a/valid-parentheses/YeomChaeeun.ts b/valid-parentheses/YeomChaeeun.ts
new file mode 100644
index 000000000..5b2ea74f1
--- /dev/null
+++ b/valid-parentheses/YeomChaeeun.ts
@@ -0,0 +1,42 @@
+/**
+ * valid-parentheses
+ * 괄호의 열고 닫히는 짝을 확인하는 알고리즘
+ * Stack(LIFO) 데이터 구조 사용
+ * 알고리즘 복잡도
+ * - 시간 복잡도: O(n)
+ * - 공간 복잡도: O(n)
+ * @param s
+ */
+function isValid(s: string): boolean {
+
+    // 접근 1 - {}, (), [] 가 포함되는지 보고 replace문으로 단순하게 풀어봄..
+    // while (s.includes("{}") || s.includes("()") || s.includes("[]")) {
+    //     s = s.replace("{}", "");
+    //     s = s.replace("()", "");
+    //     s = s.replace("[]", "");
+    // }
+    // return s === '';
+
+    // 접근 2 - leetCode의 hint를 보고 stack 을 적용
+    const stack: string[] = []
+    const pairs: {[key: string]: string} = {
+        '}': '{',
+        ')': '(',
+        ']': '['
+    }
+
+    for (const char of s) {
+        if (!pairs[char]) {
+            // 여는 괄호 저장
+            stack.push(char)
+        } else {
+             // 닫는 괄호와 매칭 확인
+            if (stack.pop() !== pairs[char]) {
+                return false
+            }
+        }
+    }
+
+    return stack.length === 0
+}
+