728x90
https://www.acmicpc.net/problem/9012
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
아마 스택 기본 문제이지 않을까 싶다.
예제로도 많이 등장하는 괄호 문제
1차 답안
n = int(input())
for i in range(n):
data = input()
stack = []
result = 'YES'
for i in data:
if i == '(':
stack.append(i)
else:
if i == ')' and len(stack) == 0:
result = "NO" # 해당 부분이 중복됨
elif stack[-1] == '(':
stack.pop()
else:
result = "NO" # 해당 부분이 중복됨
break
if len(stack) > 0:
result = 'NO'
print(result)
정답을 맞추긴 했으나 찜찜하게 맞춘 부분들이 있어 다른 분들의 답변을 참고하여 다시 풀었다.
문제점
1. 코드의 중복
2. '(' 만 append 하는 상황에서 굳이 스택의 마지막 부분을 확인 할 이유가 없음.
해결
1. else 부분은 ')' 만 확인 하는 경우로 해당 구문은 필요없음
2. stack의 길이로 빈 부분을 확인하는 것보다 스택에서 pop을 사용하는 경우를 먼저 생각
개선된 답
n = int(input())
for i in range(n):
data = input()
stack = []
result = 'YES'
for i in data:
if i == '(':
stack.append(i)
else:
if stack: # 스택의 값이 있는 경우는 서로 짝이 맞는 경우이므로 pop
stack.pop()
else: # 짝이 맞지 않는 경우로 반복문을 탈출
result = "NO" # 중복 코드의 제거
break
if len(stack) > 0:
result = 'NO'
print(result)
728x90
반응형
'Coding Test' 카테고리의 다른 글
백준 12015 - 가장 긴 증가하는 부분 수열 2( Node.js ) (0) | 2025.02.27 |
---|---|
백준 11561 - 징검다리( Python ) (0) | 2023.03.14 |
백준 1049 - 기타줄( Python ) (0) | 2023.02.22 |
백준 16401 - 과자 나눠주기( Python ) (0) | 2023.02.16 |
백준 24444 - 너비 우선 탐색 1( Python) - BFS (1) | 2023.01.18 |