문제
풀이
스택을 이용하여 간단하게 해결할 수 있다.
먼저 "("의 경우와 ")"의 경우를 나눠서 생각한다.
for i in s:
if i == "(":
stack.append("(")
반복문을 사용하여 s(여기서는 전체 괄호)중 하나씩 뽑아 진행한다.
만약 "("가 들어올 경우 스택에 그대로 추가시켜준다.
else:
if not stack:
answer = False
break
if stack.pop() == ")":
answer = False
break
")"가 들어온 경우도 두가지 경우로 나누어 생각한다.
만약 )가 들어왔지만 스택이 비어있는 경우
이전에 "("가 없이 ")"가 들어온 경우이므로 괄호가 짝지어지지 않은 경우이다.
따라서 정답이 아니므로 False로 설정하고 break한다.
또한 pop을 할경우 해당 문자가 ")"인 경우에도 성립이 안되므로 break한다.
if stack:
answer = False
마지막으로 모든 반복이 끝났는데도 스택에 원소가 남아있는 경우에도 answer를 False로 바꾼다.
코드
def solution(s):
answer = True
stack = []
for i in s:
if i == "(":
stack.append("(")
else:
if not stack:
answer = False
break
# if stack.pop() == ")":
# answer = False
# break
if stack:
answer = False
return answer
'알고리즘' 카테고리의 다른 글
[백준 kotlin] 1806 부분 합 (0) | 2024.04.15 |
---|---|
[백준 kotlin] 1260 DFS와 BFS (1) | 2024.04.13 |
[코드트리 파이썬] 삼 오 무 (1) | 2024.04.07 |
[백준 파이썬] 1701 Cubeditor (0) | 2024.04.04 |
[코드트리 파이썬] 1이 K개 이상 존재하는 부분 수열 (2) | 2024.04.01 |