diff --git a/longest-substring-without-repeating-characters/sejineer.py b/longest-substring-without-repeating-characters/sejineer.py new file mode 100644 index 000000000..96a301d07 --- /dev/null +++ b/longest-substring-without-repeating-characters/sejineer.py @@ -0,0 +1,21 @@ +""" +시간 복잡도: O(N) +공간 복잡도: O(N) +""" +class Solution: + def lengthOfLongestSubstring(self, s: str) -> int: + s_set = set() + start, end = 0, 0 + + result = 0 + + while end < len(s): + if s[end] in s_set: + s_set.remove(s[start]) + start += 1 + else: + s_set.add(s[end]) + end += 1 + result = max(result, end - start) + + return result diff --git a/number-of-islands/sejineer.py b/number-of-islands/sejineer.py new file mode 100644 index 000000000..597bb925b --- /dev/null +++ b/number-of-islands/sejineer.py @@ -0,0 +1,35 @@ +""" +시간 복잡도: O(m * n) +공간 복잡도: O(m * n) +""" +from collections import deque + +class Solution: + def numIslands(self, grid: List[List[str]]) -> int: + m, n = len(grid), len(grid[0]) + vis = [[False] * n for _ in range(m)] + + dx = [1, -1, 0, 0] + dy = [0, 0, 1, -1] + + result = 0 + for i in range(m): + for j in range(n): + if grid[i][j] == '1' and not vis[i][j]: + queue = deque() + queue.append((j, i)) + vis[i][j] = True + while queue: + cur = queue.popleft() + for nxt in range(4): + nx = cur[0] + dx[nxt] + ny = cur[1] + dy[nxt] + if not 0 <= nx < n or not 0 <= ny < m: + continue + if vis[ny][nx] or grid[ny][nx] != '1': + continue + queue.append((nx, ny)) + vis[ny][nx] = True + result += 1 + + return result diff --git a/reverse-linked-list/sejineer.py b/reverse-linked-list/sejineer.py new file mode 100644 index 000000000..129311d3f --- /dev/null +++ b/reverse-linked-list/sejineer.py @@ -0,0 +1,15 @@ +""" +시간 복잡도: O(N) +공간 복잡도: O(1) +""" +class Solution: + def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: + prev = None + + while head: + nxt = head.next + head.next = prev + prev = head + head = nxt + + return prev