From 2d46ab19fa521e81b485984b7bd3d407879d6e9c Mon Sep 17 00:00:00 2001 From: Seoya0512 Date: Fri, 26 Dec 2025 23:04:52 +0900 Subject: [PATCH 1/3] feat: week7 - reverse linked list --- reverse-linked-list/Seoya0512.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 reverse-linked-list/Seoya0512.py diff --git a/reverse-linked-list/Seoya0512.py b/reverse-linked-list/Seoya0512.py new file mode 100644 index 0000000000..2f4ccab520 --- /dev/null +++ b/reverse-linked-list/Seoya0512.py @@ -0,0 +1,23 @@ +''' +Linked List의 노드는 value와 next 포인터를 가지고 있다는 특성을 이용해 문제를 풀었음 + +Time Complexity: O(n) +- Linked List의 모든 노드를 한 번씩 방문 + +Space Complexity: O(1) +- 두개 의 포인터만 사용하여 추가적인 공간 없음 + +''' + +class Solution: + def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: + prev = None + cur = head + + while cur: + nxt = cur.next + cur.next = prev + prev = cur + cur = nxt + + return prev From 4bbf1924f72badd15ac838e9245cbd0fed27ee48 Mon Sep 17 00:00:00 2001 From: Seoya0512 Date: Sat, 27 Dec 2025 01:34:42 +0900 Subject: [PATCH 2/3] feat: week7 - longest substring without repeating characters --- .../Seoya0512.py | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 longest-substring-without-repeating-characters/Seoya0512.py diff --git a/longest-substring-without-repeating-characters/Seoya0512.py b/longest-substring-without-repeating-characters/Seoya0512.py new file mode 100644 index 0000000000..55a34c7735 --- /dev/null +++ b/longest-substring-without-repeating-characters/Seoya0512.py @@ -0,0 +1,30 @@ +''' +set_arr(현재 윈도우)에 중복 없는 부분 문자열을 유지하며 가장 긴 길이를 갱신한다. + +예) s="dvdf" +1. ['d'] +2. ['d','v'] +3. 중복 'd' 발생 → 앞에 있던 중복 문자(d)까지는 버리고, 그 뒤에 있는 문자(v)부터 다시 윈도우로 유지한다 +4. 'f' 추가 → ['v','d','f'] +5. 최종 max_length=3 + +Time Complexity: O(n^2) +- 문자열을 한 번 순회하지만, 매 단계마다 리스트에서 in, index, 슬라이싱이 선형 시간이어서 최악 O(n^2) + +Space Complexity: O(n) +- 최악의 경우 윈도우가 길이 n까지 커질 수 있음 +''' +class Solution: + def lengthOfLongestSubstring(self, s: str) -> int: + set_arr = [] + max_length = 0 + for char in s: + if char not in set_arr: + set_arr.append(char) + else: + # 중복 문자가 발견되면 처음 중복 문자의 인덱스를 찾아 그 이전까지 자르고 현재 문자 추가 + dup_idx = set_arr.index(char) + set_arr= set_arr[dup_idx+1:] + set_arr.append(char) + max_length = max(max_length, len(set_arr)) + return max_length From 7e3148a9ccc06be4c90c616df31d1c693e725cf8 Mon Sep 17 00:00:00 2001 From: Seoya0512 Date: Sat, 27 Dec 2025 01:39:18 +0900 Subject: [PATCH 3/3] feat: week7 - set matrix zeroes --- set-matrix-zeroes/Seoya0512.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 set-matrix-zeroes/Seoya0512.py diff --git a/set-matrix-zeroes/Seoya0512.py b/set-matrix-zeroes/Seoya0512.py new file mode 100644 index 0000000000..7d482e418b --- /dev/null +++ b/set-matrix-zeroes/Seoya0512.py @@ -0,0 +1,31 @@ +''' +Set 자료구조를 사용해서 0이 있는 행과 열을 기록한 후, 해당 행과 열을 0으로 변경 + +Time Complexity: O(m*n) +- 행렬의 모든 원소를 한 번씩 방문 +Space Complexity: O(m+n) +- 행과 열의 index를 저장하는데 각각 최대 m, n 크기가 필요함 + +참고: 문제에서 요구한 in-place 변경을 지키지 못함, 행과 열을 저장하는데 추가 공간이 필요하기 때문 +''' +class Solution: + def setZeroes(self, matrix: List[List[int]]) -> None: + """ + Do not return anything, modify matrix in-place instead. + """ + zero_rows = set() + zero_cols = set() + + for i in range(len(matrix)): + for j in range(len(matrix[i])): + if matrix[i][j] == 0: + zero_rows.add(i) + zero_cols.add(j) + + for row in zero_rows: + for j in range(len(matrix[row])): + matrix[row][j] = 0 + + for col in zero_cols: + for i in range(len(matrix)): + matrix[i][col] = 0