Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions container-with-most-water/ZetBe.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
'''
문제: 컨테이너 최대 물 담기
풀이: 양쪽 끝에서 시작하여 더 작은 쪽의 포인터를 이동시키며 최대 넓이를 계산
시간복잡도: O(n)
공간복잡도: O(1)
사용한 자료구조: 투 포인터
'''


class Solution:
def maxArea(self, height: List[int]) -> int:
r, l = len(height)-1, 0
answer = (r-l)*(min(height[r], height[l]))
while r > l:
answer = max(answer, (r-l)*(min(height[r], height[l])))
if height[r] < height[l]:
r -= 1
else:
l += 1
return answer



25 changes: 25 additions & 0 deletions longest-increasing-subsequence/ZetBe.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
'''
문제: 최장 증가 부분 수열
풀이: 이분 탐색을 활용하여 증가하는 수열을 유지하며 길이를 계산, 새로운 수가 기존 수열의 마지막 수보다 크면 추가, 그렇지 않으면 이분 탐색으로 적절한 위치를 찾아 교체
시간복잡도: O(n log n)
공간복잡도: O(n)
사용한 자료구조: 리스트
'''


from bisect import bisect_left

class Solution:
def lengthOfLIS(self, nums: List[int]) -> int:
answer = [nums[0]]
for i in range(1, len(nums)):
if answer[-1] < nums[i]:
answer.append(nums[i])
else:
now = bisect_left(answer, nums[i])
answer[now] = nums[i]

return len(answer)



40 changes: 40 additions & 0 deletions spiral-matrix/ZetBe.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
'''
문제: 나선형으로 행렬을 순회하며 모든 원소를 반환
풀이: 방문한 위치를 기록하는 행렬을 만들어 현재 방향으로 이동할 수 있는지 확인하며 이동, 이동할 수 없으면 방향을 바꿈
시간복잡도: O(m*n) (m: 행의 수, n: 열의 수)
공간복잡도: O(m*n) (방문 기록을 위한 행렬)
사용한 자료구조: 리스트
개인적인 회고: 문제 자체는 단순하지만 경계 조건과 방향 전환 로직을 꼼꼼히 처리해야 해서 구현에 신경을 써야 했다. 방문 기록 행렬을 사용하여 이미 방문한 위치를 피하는 방식이 직관적이고 이해하기 쉬웠다.
'''

class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
v = [[0 for i in range(len(matrix[0]))] for j in range(len(matrix))]
if len(v) == 1:
return [i for i in matrix[0]]
if len(v[0]) == 1:
answer = []
for i in matrix:
for j in i:
answer.append(j)
return answer
answer = []
d = [[0, 1], [1, 0], [0, -1], [-1, 0]]
i = 0
y, x = 0, 0
while True:
if len(answer) == len(v)*len(v[0]):
break
v[y][x] = 1
answer.append(matrix[y][x])
ny = y + d[i][0]
nx = x + d[i][1]
if not(0 <= nx < len(v[0]) and 0 <= ny < len(v) and v[ny][nx] == 0):
i = (i+1)%4
ny, nx = y + d[i][0], x + d[i][1]
y, x = ny, nx


return answer


33 changes: 33 additions & 0 deletions valid-parentheses/ZetBe.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
'''
문제: 괄호 쌍 유효성 검사(서로 엇갈려서 짝이 맞으면 무효함)
풀이: 스택 자료구조를 활용하여 여는 괄호를 만나면 스택에 추가, 닫는 괄호를 만나면 스택의 최상단 요소와 비교하여 짝이 맞으면 pop, 아니면 False 반환
시간복잡도: O(n)
공간복잡도: O(n)
사용한 자료구조: 스택(리스트)
'''


class Solution:
def isValid(self, s: str) -> bool:
stack = []

for i in s:
if len(stack) == 0 and (i == '}' or i == ')' or i == ']'):
return False
if i == '[' or i == '(' or i == '{':
stack.append(i)
if i == '}' or i == ')' or i == ']':
if i == '}' and stack[len(stack)-1] == '{':
stack.pop()
elif i == ')' and stack[len(stack)-1] == '(':
stack.pop()
elif i == ']' and stack[len(stack)-1] == '[':
stack.pop()
else:
return False
if len(stack) == 0:
return True
return False