반응형
문제
https://www.acmicpc.net/problem/4949
4949번: 균형잡힌 세상
각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에
www.acmicpc.net
코드
while True:
text = input()
if text == '.':
break
stack = []
tf = True
for i in text:
if i == '(' or i == '[':
stack.append(i)
elif i == ')':
if not stack or stack[-1] == '[':
tf = False
break
elif stack[-1] == '(':
stack.pop()
elif i ==']':
if not stack or stack[-1] =='(':
tf = False
break
elif stack[-1] == '[':
stack.pop()
if tf == True and not stack:
print('yes')
else:
print('no')
설명
괄호의 조건을 조금 더 생각해야 하는 문제다.
우선 3가지 경우를 생각해야 한다.
1. 괄호가 '(' 혹은 '['인 경우
2. 괄호가 ')'인 경우
3. 괄호가 ']'인 경우
1번의 경우는 그냥 stack에 더해준다.
2번의 경우는 stack이 없거나 stack의 마지막 괄호가 '['인 경우라면,
문장의 괄호가 잘못된 경우이므로 반복문을 종료하고 no를 출력한다.
만약 stack의 마지막 괄호가 '('인 경우라면,
괄호를 없애준다(괄호끼리 없애준다)
3번의 경우는 2번과 유사하게 진행한다.
반복문을 다 진행하고 stack에 남은 문장이 없다면,
yes를 출력하고 그렇지 않으면 no를 출력한다.
반응형
'개발 연습장 > 백준 문제풀이' 카테고리의 다른 글
[파이썬, Python] 백준 2164: 카드2 (0) | 2023.03.10 |
---|---|
[파이썬, Python] 백준 1874: 스택 수열 (0) | 2023.03.09 |
[파이썬, Python] 백준 9012: 괄호 (0) | 2023.03.07 |
[파이썬, Python] 백준 10773: 제로 (0) | 2023.03.06 |
[파이썬, Python] 백준 10828: 스택 (0) | 2023.03.03 |