From bba4367fbc40196551f04f35fe2e90df042737df Mon Sep 17 00:00:00 2001 From: yyyyyyyyy Date: Mon, 12 May 2025 18:49:24 +0900 Subject: [PATCH 1/7] longest-substring-without-repeating-characters solution --- longest-substring-without-repeating-characters/yyyyyyyyyKim.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 longest-substring-without-repeating-characters/yyyyyyyyyKim.py diff --git a/longest-substring-without-repeating-characters/yyyyyyyyyKim.py b/longest-substring-without-repeating-characters/yyyyyyyyyKim.py new file mode 100644 index 000000000..e69de29bb From fbffd5eb3defc7d11ba4e7210a30e443c48223c8 Mon Sep 17 00:00:00 2001 From: yyyyyyyyy Date: Mon, 12 May 2025 22:38:34 +0900 Subject: [PATCH 2/7] longest-substring-without-repeating-characters solution --- .../yyyyyyyyyKim.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/longest-substring-without-repeating-characters/yyyyyyyyyKim.py b/longest-substring-without-repeating-characters/yyyyyyyyyKim.py index e69de29bb..4b7c88fd5 100644 --- a/longest-substring-without-repeating-characters/yyyyyyyyyKim.py +++ b/longest-substring-without-repeating-characters/yyyyyyyyyKim.py @@ -0,0 +1,21 @@ +class Solution: + def lengthOfLongestSubstring(self, s: str) -> int: + + # 브루트포스(시간복잡도 : O(n^2)) + answer = 0 + + for i in range(len(s)): + # 중복없는 문자열을 저장할 집합 + substring = set() + + for j in range(i,len(s)): + + # 중복 문자를 만나면 break + if s[j] in substring: + break + + # 중복 아니면 문자 추가하고 긴 문자열 길이 비교해서 업데이트 + substring.add(s[j]) + answer = max(answer, len(substring)) + + return answer From 32f43a42ebddc206e633816d8c95209c3741fed1 Mon Sep 17 00:00:00 2001 From: yyyyyyyyy Date: Tue, 13 May 2025 22:53:14 +0900 Subject: [PATCH 3/7] number-of-islands solution --- number-of-islands/yyyyyyyyyKim.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 number-of-islands/yyyyyyyyyKim.py diff --git a/number-of-islands/yyyyyyyyyKim.py b/number-of-islands/yyyyyyyyyKim.py new file mode 100644 index 000000000..a89b1ba92 --- /dev/null +++ b/number-of-islands/yyyyyyyyyKim.py @@ -0,0 +1,31 @@ +class Solution: + def numIslands(self, grid: List[List[str]]) -> int: + + # DFS (시간복잡도 O(m*n), 공간복잡도 O(m*n)) + answer = 0 # 섬의 수 + m = len(grid) + n = len(grid[0]) + + # 하나의 섬 처리(연결된 땅 모두 방문) + def dfs(x,y): + # 범위를 벗어나거나, 이미 방문했거나, 땅이 아니면 종료 + if x < 0 or y < 0 or x >= m or y >= n or grid[x][y] != "1": + return + + # 현재 땅 방문처리 + grid[x][y] = "*" + + # 상하좌우 탐색 + dfs(x+1, y) + dfs(x-1, y) + dfs(x, y+1) + dfs(x, y-1) + + for i in range(m): + for j in range(n): + # 땅 발견시 dfs로 연결되어 있는 모든 땅 방문하고 섬+1 처리 + if grid[i][j] == "1": + dfs(i,j) + answer += 1 + + return answer From 60d0ed2709e393ba16c6fba0e686011f5b04cadc Mon Sep 17 00:00:00 2001 From: yyyyyyyyy Date: Wed, 14 May 2025 22:40:02 +0900 Subject: [PATCH 4/7] unique-paths solution --- unique-paths/yyyyyyyyyKim.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 unique-paths/yyyyyyyyyKim.py diff --git a/unique-paths/yyyyyyyyyKim.py b/unique-paths/yyyyyyyyyKim.py new file mode 100644 index 000000000..b1ebb9e18 --- /dev/null +++ b/unique-paths/yyyyyyyyyKim.py @@ -0,0 +1,13 @@ +class Solution: + def uniquePaths(self, m: int, n: int) -> int: + + # DP (시간복잡도 O(m*n), 공간복잡도 O(m*n)) + # 모든 1행과 1열은 경로가 1개이므로 1로 배열 초기화. + dp = [[1]*n for _ in range(m)] + + for i in range(1,m): + for j in range(1,n): + # 현재위치 경로 경우의 수 = 위쪽 + 왼쪽 + dp[i][j] = dp[i-1][j] + dp[i][j-1] + + return dp[m-1][n-1] From f73c2ce30833b2ecd6e2274bec6e57a1a8fd3b02 Mon Sep 17 00:00:00 2001 From: yyyyyyyyy Date: Thu, 15 May 2025 19:33:23 +0900 Subject: [PATCH 5/7] set-matrix-zeroes solution --- set-matrix-zeroes/yyyyyyyyyKim.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 set-matrix-zeroes/yyyyyyyyyKim.py diff --git a/set-matrix-zeroes/yyyyyyyyyKim.py b/set-matrix-zeroes/yyyyyyyyyKim.py new file mode 100644 index 000000000..469e09ce8 --- /dev/null +++ b/set-matrix-zeroes/yyyyyyyyyKim.py @@ -0,0 +1,26 @@ +class Solution: + def setZeroes(self, matrix: List[List[int]]) -> None: + """ + Do not return anything, modify matrix in-place instead. + """ + # 0이 있는 행, 열을 기록해두고 그 기록을 토대로 바꾸기(시간복잡도 O(m*n), 공간복잡도 O(m+n)) + m, n = len(matrix), len(matrix[0]) + # rows, cols = [] , [] -> 중복되어 들어갈 수 있음. 불필요함. 중복제거를 위해 set 사용. + rows, cols = set(), set() + + # 0이 있는 행, 열 기록 + for i in range(m): + for j in range(n): + if matrix[i][j] == 0: + rows.add(i) + cols.add(j) + + # 기록된 행 0으로 바꾸기 + for i in rows: + for j in range(n): + matrix[i][j] = 0 + + # 기록된 열 0으로 바꾸기 + for j in cols: + for i in range(m): + matrix[i][j] = 0 From da62e1314e39e6f24be70358aef7657c10e48514 Mon Sep 17 00:00:00 2001 From: yyyyyyyyy Date: Thu, 15 May 2025 19:37:07 +0900 Subject: [PATCH 6/7] set-matrix-zeroes solution --- set-matrix-zeroes/yyyyyyyyyKim.py | 1 + 1 file changed, 1 insertion(+) diff --git a/set-matrix-zeroes/yyyyyyyyyKim.py b/set-matrix-zeroes/yyyyyyyyyKim.py index 469e09ce8..a4c6a5714 100644 --- a/set-matrix-zeroes/yyyyyyyyyKim.py +++ b/set-matrix-zeroes/yyyyyyyyyKim.py @@ -4,6 +4,7 @@ def setZeroes(self, matrix: List[List[int]]) -> None: Do not return anything, modify matrix in-place instead. """ # 0이 있는 행, 열을 기록해두고 그 기록을 토대로 바꾸기(시간복잡도 O(m*n), 공간복잡도 O(m+n)) + # Follow up : 공간복잡도 O(1) 생각해볼것 m, n = len(matrix), len(matrix[0]) # rows, cols = [] , [] -> 중복되어 들어갈 수 있음. 불필요함. 중복제거를 위해 set 사용. rows, cols = set(), set() From 629c00cbb7c3a2fe43362ca131cd23a0c50033fb Mon Sep 17 00:00:00 2001 From: yyyyyyyyy Date: Fri, 16 May 2025 22:55:16 +0900 Subject: [PATCH 7/7] reverse-linked-list solution --- reverse-linked-list/yyyyyyyyyKim.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 reverse-linked-list/yyyyyyyyyKim.py diff --git a/reverse-linked-list/yyyyyyyyyKim.py b/reverse-linked-list/yyyyyyyyyKim.py new file mode 100644 index 000000000..b6d165529 --- /dev/null +++ b/reverse-linked-list/yyyyyyyyyKim.py @@ -0,0 +1,19 @@ +# 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]: + + # 시간복잡도 O(n), 공간복잡도 O(1) + answer = None + + while head: + next_node = head.next # 다음 노드 저장 + head.next = answer # 현재 노드의 next를 이전 노드로 변경 + answer = head # answer를 현재 노드로 업데이트 + head = next_node # head를 다음 노드로 이동 + + # answer = 역순 리스트의 head + return answer