Skip to content

Commit 5f97cdc

Browse files
authored
Merge pull request #4 from gyeo-ri/valid-parentheses
Valid parentheses
2 parents 93e82a0 + 55c4df4 commit 5f97cdc

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

valid-parentheses/gyeo-ri.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
"""
2+
[결과 요약]
3+
# 재시도횟수: 3회
4+
1. 조건에는 맞지만 메모리를 많이 사용 / 빈번한 False 리턴을 사용한 방법:: O(n)/O(n)
5+
2. 1의 로직의 가독성과 메모리 사용량 개선하기: O(n)/O(n)
6+
3. 실제로는 if/else문으로 풀어도 최적의 성능이 나오면서 가독성 측면에서도 유리: : O(n)/O(n)
7+
"""
8+
9+
10+
class Solution:
11+
def isValid(self, s: str) -> bool:
12+
character_map = {"(": ")", "{": "}", "[": "]"}
13+
s_list = []
14+
15+
for c in s:
16+
if c in character_map:
17+
s_list.append(character_map[c])
18+
19+
else:
20+
if len(s_list) > 0:
21+
if s_list.pop() == c:
22+
continue
23+
return False
24+
25+
return len(s_list) == 0
26+
27+
28+
"""
29+
# 실제로는 복잡한 로직 없이 if/else로 직접 비교하는 쪽이 성능과 코드 가독성 면에서 모두 유리
30+
class Solution:
31+
def isValid(self, s: str) -> bool:
32+
s_list = []
33+
34+
for c in s:
35+
if c == '(':
36+
s_list.append(')')
37+
elif c == '{':
38+
s_list.append('}')
39+
elif c == '[':
40+
s_list.append(']')
41+
else:
42+
if not s_list or s_list.pop() != c:
43+
return False
44+
"""
45+
46+
47+
if __name__ == "__main__":
48+
test_cases = [
49+
("{{{[[[(([{{}}]))]]]}}}", True),
50+
("{{{]}}", False),
51+
("{", False),
52+
("}}]", False),
53+
("{}[]()", True),
54+
("{[]}[()]", True),
55+
]
56+
57+
solution = Solution()
58+
for idx, case_ in enumerate(test_cases):
59+
s, answer = case_
60+
result = solution.isValid(s)
61+
assert (
62+
answer == result
63+
), f"Test Case {idx} Failed: Expected {answer}, Got {result}"

0 commit comments

Comments
 (0)