https://www.acmicpc.net/problem/4949
#세팅 값
import sys
sys.stdin = open('solve.txt')
input = sys.stdin.readline
def check_balance(line):
stack = [] # 문자열을 저장할 스택
for c in line:
# 입력받은 문자열을 순회하면서 ([ 이 있다면 스택을 쌓아둔다.)
if c in '([':
stack.append(c)
#만약에 c 가 ) 일 경우
# 스택에 맨 위에 있는게 ( 이 아니거나
# 스택에 아무것도 없다면 no 를 리턴한다.
elif c == ')':
if not stack or stack[-1] != '(':
return 'no'
stack.pop()
# 위와 같은 논리로 진행한다.
elif c == ']':
if not stack or stack[-1] != '[':
return 'no'
stack.pop()
# 다 끝내고 나서 만약에 stack에 아무것도 없다면 yes, 아닐 경우 no를 최종적으로 리턴
return 'yes' if not stack else 'no'
while True:
# 줄바꿈을 기준으로 input 값을 넣어 놓는다.
line = input().strip('\n')
if line == '.':
break # 탈출 조건
print(check_balance(line))
왜 스택 하나로도 두가지 문자를 처리가 가능할까?
스택은 후입선출(LIFO) 구조라, 가장 최근에 들어간(열린) 괄호부터 닫아줘야 합니다.
어떤 괄호인지((인지 [인지) 저장하고, 닫힐 때만 그 짝을 확인하면 되므로 하나의 스택으로도 충분합니다.
'Baekjoon' 카테고리의 다른 글
2164. 카드 2 (0) | 2025.02.19 |
---|---|
18258. 큐 2 (0) | 2025.02.19 |
1157. 단어 공부 (0) | 2025.02.19 |
21862. 사각형 그리기 게임 (4) | 2025.02.17 |
1018. 체스판 다시 칠하기 (0) | 2025.02.13 |