From a5cc0300ff2c6d95b35c2c8e29528fca645e3adf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=98=A4=EC=99=95=ED=83=9D=5FT6102=28Wang-Taek=20Oh=29?= Date: Sat, 18 Apr 2026 17:08:00 +0900 Subject: [PATCH 1/4] Solved longest substring without repeating characters --- .../ohkingtaek.py | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 longest-substring-without-repeating-characters/ohkingtaek.py diff --git a/longest-substring-without-repeating-characters/ohkingtaek.py b/longest-substring-without-repeating-characters/ohkingtaek.py new file mode 100644 index 0000000000..5e717419a6 --- /dev/null +++ b/longest-substring-without-repeating-characters/ohkingtaek.py @@ -0,0 +1,23 @@ +""" +Time Complexity: O(n^2) +Space Complexity: O(n) + +과정: +1. 문자열을 순회하면서 중복되지 않는 가장 긴 부분 문자열을 찾음 +2. 중복되지 않는 부분 문자열을 찾으면 그 길이를 최대 길이와 비교하여 최대 길이를 업데이트함 +3. 중복되는 부분 문자열을 찾으면 그 부분 문자열을 초기화함 +4. 중복되지 않는 부분 문자열을 찾으면 그 부분 문자열을 최대 길이와 비교하여 최대 길이를 업데이트함 +""" + + +class Solution: + def lengthOfLongestSubstring(self, s: str) -> int: + ans = 0 + for left in range(len(s)): + tmp = set() + for right in range(left, len(s)): + if s[right] in tmp: + break + tmp.add(s[right]) + ans = max(right - left + 1, ans) + return ans From d1adc7a11772ca6de10ab645fc2923f510419592 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=98=A4=EC=99=95=ED=83=9D=5FT6102=28Wang-Taek=20Oh=29?= Date: Sat, 18 Apr 2026 17:08:10 +0900 Subject: [PATCH 2/4] solve number of islands --- number-of-islands/ohkingtaek.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 number-of-islands/ohkingtaek.py diff --git a/number-of-islands/ohkingtaek.py b/number-of-islands/ohkingtaek.py new file mode 100644 index 0000000000..b05ff9c737 --- /dev/null +++ b/number-of-islands/ohkingtaek.py @@ -0,0 +1,32 @@ +""" +Time Complexity: O(m * n) +Space Complexity: O(m * n) + +과정: +1. 2차원 배열을 순회하면서 1을 만나면 섬의 개수를 증가시킴 +2. DFS를 통해 해당 섬을 탐색함 +3. 해당 섬을 탐색하면서 0을 만나면 탐색을 종료함 +""" + + +class Solution: + def numIslands(self, grid: List[List[str]]) -> int: + ans = 0 + m, n = len(grid[0]), len(grid) + visited = [[0] * m for _ in range(n)] + dx, dy = [-1, 0, 1, 0], [0, -1, 0, 1] + for y in range(n): + for x in range(m): + if int(grid[y][x]) == 1 and visited[y][x] == 0: + ans += 1 + dfs = [(x, y)] + visited[y][x] = 1 + while dfs: + cx, cy = dfs.pop(0) + for _dx, _dy in zip(dx, dy): + gy = cy + _dy + gx = cx + _dx + if gx >= 0 and gy >= 0 and gx < m and gy < n and int(grid[gy][gx]) == 1 and visited[gy][gx] == 0: + visited[gy][gx] = 1 + dfs.append((gx, gy)) + return ans From 254bd980e48e2871680d6c4160f91fb686b830fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=98=A4=EC=99=95=ED=83=9D=5FT6102=28Wang-Taek=20Oh=29?= Date: Sat, 18 Apr 2026 17:08:20 +0900 Subject: [PATCH 3/4] solve reverse linkedlist --- reverse-linked-list/ohkingtaek.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 reverse-linked-list/ohkingtaek.py diff --git a/reverse-linked-list/ohkingtaek.py b/reverse-linked-list/ohkingtaek.py new file mode 100644 index 0000000000..a4b56482e2 --- /dev/null +++ b/reverse-linked-list/ohkingtaek.py @@ -0,0 +1,25 @@ +""" +Time Complexity: O(n) +Space Complexity: O(1) + +과정: +1. 두 개의 포인터를 사용하여 리스트를 순회하면서 뒤집음 +2. 첫 번째 포인터는 이전 노드를 가리키고, 두 번째 포인터는 현재 노드를 가리킴 +3. 현재 노드의 next를 이전 노드로 변경하고, 두 포인터를 한 칸씩 이동시킴 +4. 마지막 노드까지 반복하면 리스트가 뒤집어짐 +""" + + +# Definition for singly-linked list. +# class ListNode: +# def __init__(self, val=0, next=None): +# self.val = val +# self.next = next +class Solution: + def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: + left, now = None, head + while now: + right = now.next + now.next = left + left, now = now, right + return left From 43916f442842c9edf71f548b5f66a3f436af4d4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=98=A4=EC=99=95=ED=83=9D=5FT6102=28Wang-Taek=20Oh=29?= Date: Sat, 18 Apr 2026 17:08:31 +0900 Subject: [PATCH 4/4] solve set matrix zeroes --- set-matrix-zeroes/ohkingtaek.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 set-matrix-zeroes/ohkingtaek.py diff --git a/set-matrix-zeroes/ohkingtaek.py b/set-matrix-zeroes/ohkingtaek.py new file mode 100644 index 0000000000..7d5c027b6a --- /dev/null +++ b/set-matrix-zeroes/ohkingtaek.py @@ -0,0 +1,31 @@ +""" +Time Complexity: O(m * n) +Space Complexity: O(m + n) + +과정: +1. 0이 있는 행과 열을 따로 집합에 기록해둠 +2. 만들어진 행과 열을 기반으로 0으로 바꿔줌 +""" + + +class Solution: + def setZeroes(self, matrix: List[List[int]]) -> None: + """ + Do not return anything, modify matrix in-place instead. + """ + m, n = len(matrix[0]), len(matrix) + array = [] + for x in range(m): + for y in range(n): + if matrix[y][x] == 0: + array.append((x, y)) + a, b = set(), set() + for x, y in array: + a.add(x) + b.add(y) + for x in range(m): + for i in b: + matrix[i][x] = 0 + for y in range(n): + for i in a: + matrix[y][i] = 0