Skip to content

Commit a6b503f

Browse files
committed
feat: Valid Parentheses 문제 풀이
1 parent 04dccd2 commit a6b503f

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed

valid-parentheses/unpo88.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
class Solution:
2+
def isValid(self, s: str) -> bool:
3+
stack = []
4+
pairs = {')': '(', '}': '{', ']': '['}
5+
6+
for c in s:
7+
if c in pairs:
8+
if not stack or stack.pop() != pairs[c]:
9+
return False
10+
else:
11+
stack.append(c)
12+
13+
return not stack
14+
15+
16+
"""
17+
================================================================================
18+
풀이 과정
19+
================================================================================
20+
21+
[1차 시도] Stack으로 직접 비교
22+
────────────────────────────────────────────────────────────────────────────────
23+
1. 괄호 판독기
24+
2. Stack으로 괄호 넣고, 매칭되는것이 나왔을 때, 바로 pop하면서 비교
25+
3. 하나라도 틀린게 있으면 False
26+
4. 아니면 True
27+
28+
stack = []
29+
for c in s:
30+
if c == ')':
31+
if len(stack) == 0 or stack.pop() != '(':
32+
return False
33+
elif c == '}':
34+
if len(stack) == 0 or stack.pop() != '{':
35+
return False
36+
elif c == ']':
37+
if len(stack) == 0 or stack.pop() != '[':
38+
return False
39+
else:
40+
stack.append(c)
41+
42+
return True if len(stack) == 0 else False
43+
44+
5. 문제점: 각 닫는 괄호마다 동일한 패턴이 반복됨
45+
6. 개선 포인트: 딕셔너리로 매핑하면 중복 제거 가능
46+
47+
────────────────────────────────────────────────────────────────────────────────
48+
[2차 시도] 딕셔너리 매핑으로 개선
49+
────────────────────────────────────────────────────────────────────────────────
50+
7. pairs = {')': '(', '}': '{', ']': '['}
51+
- 닫는 괄호 → 여는 괄호 매핑
52+
53+
8. 개선된 로직:
54+
- c가 닫는 괄호면 (c in pairs) → stack에서 pop해서 매칭 확인
55+
- c가 여는 괄호면 → stack에 push
56+
57+
stack = []
58+
pairs = {')': '(', '}': '{', ']': '['}
59+
60+
for c in s:
61+
if c in pairs:
62+
if not stack or stack.pop() != pairs[c]:
63+
return False
64+
else:
65+
stack.append(c)
66+
67+
return not stack
68+
69+
9. 추가 개선:
70+
- len(stack) == 0 → not stack
71+
- True if ... else False → not stack
72+
73+
10. 시간복잡도: O(n) - 문자열 한 번 순회
74+
11. 공간복잡도: O(n) - 최악의 경우 모든 문자가 여는 괄호
75+
"""

0 commit comments

Comments
 (0)