diff --git a/longest-substring-without-repeating-characters/sangbeenmoon.py b/longest-substring-without-repeating-characters/sangbeenmoon.py index eb2d80bd74..9350748911 100644 --- a/longest-substring-without-repeating-characters/sangbeenmoon.py +++ b/longest-substring-without-repeating-characters/sangbeenmoon.py @@ -14,3 +14,30 @@ def lengthOfLongestSubstring(self, s: str) -> int: answer = max(answer, i - start + 1) return answer + + +# ------ +class Solution: + def lengthOfLongestSubstring(self, s: str) -> int: + + left = 0 + right = 0 + + answer = 0 + + dictionary = {} + + for i,ch in enumerate(s): + right += 1 + if ch not in dictionary: + dictionary[ch] = i + else: + idx = dictionary[ch] + if left <= idx: + left = idx + 1 + dictionary[ch] = i + + print(right, left) + answer = max(answer, right - left) + + return answer diff --git a/number-of-islands/sangbeenmoon.py b/number-of-islands/sangbeenmoon.py index 34b50b9a82..4f78b81065 100644 --- a/number-of-islands/sangbeenmoon.py +++ b/number-of-islands/sangbeenmoon.py @@ -27,3 +27,53 @@ def dfs(xx:int, yy:int): answer = answer + 1 dfs(x,y) return answer + +# ------ + + + + + + +class Solution: + def numIslands(self, grid: List[List[str]]) -> int: + + x_len , y_len = len(grid[0]), len(grid) + + visited = [[False] * x_len for _ in range(y_len)] + + dx = [0,0,-1,1] + dy = [-1,1,0,0] + + def dfs(xx:int, yy:int): + + for d in range(4): + nx = xx + dx[d] + ny = yy + dy[d] + + if 0 <= nx and nx < x_len and 0 <= ny and ny < y_len and grid[ny][nx] == "1": + if not visited[ny][nx]: + visited[ny][nx] = True + dfs(nx,ny) + + return + + answer = 0 + + for xx in range(x_len): + for yy in range(y_len): + if grid[yy][xx] == "1" and not visited[yy][xx]: + answer += 1 + visited[yy][xx] = True + dfs(xx,yy) + + return answer + + + + + + + + + diff --git a/set-matrix-zeroes/sangbeenmoon.py b/set-matrix-zeroes/sangbeenmoon.py index b4e010c14b..2070bfd9b2 100644 --- a/set-matrix-zeroes/sangbeenmoon.py +++ b/set-matrix-zeroes/sangbeenmoon.py @@ -20,3 +20,46 @@ def setZeroes(self, matrix: List[List[int]]) -> None: for c in range(n): if r in row_dict or c in col_dict: matrix[r][c] = 0 + + + + + + + + + +# --------- + +# SC : O(1) + +class Solution: + def setZeroes(self, matrix: List[List[int]]) -> None: + """ + Do not return anything, modify matrix in-place instead. + """ + r_len , c_len = len(matrix), len(matrix[0]) + + set_zero_first_col = any(matrix[r][0] == 0 for r in range(r_len)) + + for r in range(r_len): + for c in range(1, c_len): # c는 1부터 + if matrix[r][c] == 0: + matrix[r][0] = 0 + matrix[0][c] = 0 + + for r in range(1, r_len): + for c in range(1, c_len): + if matrix[r][0] == 0 or matrix[0][c] == 0: + matrix[r][c] = 0 + + if matrix[0][0] == 0: # 0행 먼저 + for c in range(c_len): + matrix[0][c] = 0 + + + if set_zero_first_col: # 0열 나중 + for r in range(r_len): + matrix[r][0] = 0 + + diff --git a/unique-paths/sangbeenmoon.py b/unique-paths/sangbeenmoon.py index e1907713e5..ae209fe167 100644 --- a/unique-paths/sangbeenmoon.py +++ b/unique-paths/sangbeenmoon.py @@ -11,3 +11,17 @@ def uniquePaths(self, m: int, n: int) -> int: dp[r][c] = dp[r-1][c] + dp[r][c-1] return dp[m-1][n-1] + + + +# ------------ + +class Solution: + def uniquePaths(self, m: int, n: int) -> int: + dp = [[1] * n for _ in range(m)] + + for r in range(1,m): + for c in range(1,n): + dp[r][c] = dp[r-1][c] + dp[r][c-1] + + return dp[m-1][n-1]