문제 링크 : https://www.acmicpc.net/problem/4949
풀이
배열을 사용하여 '(', '[' 가 나타나면 배열에 저장한 후, 그에 맞는 짝이 나오면 배열에 저장되어 있던 값들을 pop 시키는 형식으로 문제 풀이를 진행했다.
import sys
from collections import deque
while True:
s = sys.stdin.readline()
if s == ".\n": # "."이 입력되면 종료
break
arr = deque() # (, [들을 담을 배열
for i in range(len(s)):
if s[i] in ('(', ')', '[', ']'): # (, ), [, ]만 arr에 담도록 하기
arr.append(s[i])
dq = deque() # 균형 잡힌 문자열인지 확인하기 위한 배열
if len(arr) == 0: # 아무 괄호들도 있지 않다면 균형 잡힌 문자열
print("yes")
# 짝이 맞는 괄호끼리 수가 같은 것은 균형 잡힌 문자열의 필요충분조건
elif arr.count('(') == arr.count(')') and arr.count('[') == arr.count(']'):
for i in arr: # 괄호들을 순환하며 체크
if i == '(' or i == '[': # 왼쪽 괄호가 나타나면 arr에 저장
dq.append(i)
elif dq and i == ')': # )가 나타나면
if dq[-1] == '(': # 가장 최근에 나타난 왼쪽 괄호가 (여야 균형 잡힌 문자열임
dq.pop()
else: # 그렇지 않다면 균형 잡힌 문자열이 아님
dq.append(".")
break
elif dq and i == ']': # ]가 나타나면
if dq[-1] == '[': # 가장 최근에 나타난 왼쪽 괄호가 [여야 균형 잡힌 문자열임
dq.pop()
else: # 그렇지 않다면 균형 잡힌 문자열이 아님
dq.append('.')
break
else: # 그 외의 경우는 균형 잡힌 문자열이 아님
dq.append(".")
break
if len(dq) != 0: # .가 들어가 배열이 비지 않았다면
print("no") # 균형 잡히지 않은 문자열
else: # 그렇지 않다면
print("yes") # 균형 잡힌 문자열
else: # 필요충분조건을 만족하지 않으므로
print("no") # 균형 잡히지 않은 문자열
'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글
(Python) 백준 10773번 - 제로 (0) | 2023.01.09 |
---|---|
(Python) 백준 9012번 - 괄호 (0) | 2023.01.05 |
(Python) 백준 2839번 - 설탕 배달 (0) | 2023.01.04 |
(Python) 백준 2164번 - 카드 2 (0) | 2023.01.04 |
(Python) 백준 1920번 - 수 찾기 (0) | 2023.01.02 |