9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
내가 작성한 코드 (60ms)
import sys
input = sys.stdin.readline
t = int(input())
for _ in range(t):
string = input().rstrip()
stack = []
for i in range(len(string)):
if string[i] == '(':
stack.append('(')
else: # ')' 입력받았는데
if not len(stack) == 0: # 앞서 '(' 를 입력했었다면
stack.pop() # 삭제
else: # 앞서 '('를 입력하지 않았다면
stack.append(')') # 일단 ')' 입력 -> 마지막 if 문 조건 맞추기위해
break
if not len(stack) == 0:
print("NO")
else:
print("YES")
처음에 stack이 비어있는 상황에서 ')'가 입력되었다면, "NO"를 출력한 후, break 하려고 했는데
그러면 for문을 나오고 마지막 if 문에서 'stack 이 비어있다' 는 조건에도 부합하여 "YES" 를 출력하게 되었다.
그래서 어떻게 코드를 수정해야할까 고민하다가 그냥 ')'를 추가하는걸로 코드를 작성하였고, 성공하였다.
풀긴풀었지만 나 스스로도 만족스럽지 않아서 풀이를 찾아보았다.
수정한 코드 (44ms)
import sys
input = sys.stdin.readline
for _ in range(int(input())):
string = input().strip()
while '()' in string:
# str.replace(a,b) = 문자열 str 속 a를 b로 바꾼다.
string = string.replace('()', '')
print("NO" if string else "YES")
'🧩 Programming Languages > Python CodingTest' 카테고리의 다른 글
백준 2750번(bronze 2) : 수 정렬하기 (2차) (0) | 2024.08.17 |
---|---|
백준 1157번(bronze 1) : 단어 공부 (0) | 2024.08.12 |
백준 17103번(silver 2) : 골드바흐 파티션 (소수의 합으로 이루어진 수) (0) | 2024.02.03 |
백준 4948번(silver 2) : 베르트랑 공준 (특정 범위 내 소수 개수 구하기) (0) | 2024.02.03 |
백준 1929번(silver 3) : 소수 구하기 (1) | 2024.01.28 |