문제
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다. 그리고 두 VPS x 와 y를 접합(concatenation)시킨 새로운 문자열 xy도 VPS 가 된다. 예를 들어 “(())()”와 “((()))” 는 VPS 이지만 “(()(”, “(())()))” , 그리고 “(()” 는 모두 VPS 가 아닌 문자열이다.
여러분은 입력으로 주어진 괄호 문자열이 VPS 인지 아닌지를 판단해서 그 결과를 YES 와 NO 로 나타내어야 한다.
코드
import sys
input = sys.stdin.readline
n = int(input())
for i in range(n):
str_ = input().rstrip()
stack = []
for s in str_:
if s == '(':
stack.append('(')
else: # ')'일 때
if stack:
stack.pop()
else: # 빈 리스트일 때 pop()을 하면 error
stack.append(')')
break
print("YES" if len(stack)==0 else "NO")
나의 생각
리스트가 비어있을 때 pop() 메서드를 호출하면 IndexError가 발생하는데, 이를 방지하기 위해서는 리스트가 비어있는지 먼저 확인하고 pop()을 호출해야 한다.
그래서 나는 ')'를 추가하여 len(stack)이 0이 되지 않도록 만들어 줬다.
그런데 for-else 문을 사용하면 가독성이 더 좋아질 것 같다. - >
for문에서 한 번도 break가 난적이 없다면 else문을 실행을 한다.
for element in sequence:
# 반복 수행할 코드
if condition:
break
else:
# 반복 완료 후 수행할 코드
'Algorithm > 백준' 카테고리의 다른 글
| [BAEKJOON] 2609번: 최대공약수와 최소공배수 (0) | 2023.08.23 |
|---|---|
| [BAEKJOON] 10430번: 나머지 (0) | 2023.08.23 |
| [BAEKJOON] 10866번: 덱 (0) | 2023.08.22 |
| [BAEKJOON] 10835번: 큐 (0) | 2023.08.22 |
| [BAEKJOON] 9093번: 단어 뒤집기 (0) | 2023.03.18 |