

문제를 살펴보면 이전 문제와 유사하지만 이번에는 실제 문장에 적용하여 yes or no를 출력해야한다
while True: 문을 통해 무한 루프를 만들어주고 문제에서 제시한 .을 입력받으면 종료되도록 초반에 설정해준다
이후에 for문을 돌면서 여는 괄호라면 스택에 저장하고, 닫는 괄호라면 스택을 확인하여 짝이 맞는지 확인해주면 된다
이를 처음에 적용하여 작성한 코드이다
import sys
while True:
stack = []
text = sys.stdin.readline()
if text == '.\n':
break
for sentence in text:
if sentence == '(' or sentence == '[':
stack.append(sentence)
elif sentence == ')':
if stack:
if stack[-1] == '(':
stack.pop()
else:
stack.append(sentence)
break
elif sentence == ']':
if stack:
if stack[-1] == '[':
stack.pop()
else:
stack.append(sentence)
break
if len(stack) == 0:
print('yes')
else:
print('no')
하지만 제출하였더니 틀렸습니다! 라는 문구를 보고 말았다
테스트를 다 해보긴 했지만 굳이 sys.stdin.readline()을 써서 그런가 싶은 마음에 input()으로 바꾸어도
틀렸습니다! 라는 문구는 여전했다 약 10분간의 고민 끝에 찾은건 아주 간단한 문제였다
현재 작성한 코드에는 스택에 내용이 존재할 때와 아닐때로 나누었는데
만약 스택에 내용이 존재하지만 다른 괄호가 존재할 경우를 대비하지 않았다
if stack과 stack[-1] == '괄호' 를 and로 묶어두어야 만약 옳지 않은 괄호가 등장하였을 때 no를 출력하게 된다
예제의 코드는 정상 작동하였지만 일부 경우에서는 no가 나와야하지만 yes가 나올 가능성도 존재했던 것이다
그래서 stack 과 stack[-1]을 확인하는 코드를 한 번에 묶어 제출하였더니 정답임을 확인할 수 있었다
while True:
stack = []
text = input()
if text == '.':
break
for sentence in text:
if sentence == '(' or sentence == '[':
stack.append(sentence)
elif sentence == ')':
if len(stack) != 0 and stack[-1] == '(':
stack.pop()
else:
stack.append(sentence)
break
elif sentence == ']':
if len(stack) != 0 and stack[-1] == '[':
stack.pop()
else:
stack.append(sentence)
break
if len(stack) == 0:
print('yes')
else:
print('no')

'Baekjoon' 카테고리의 다른 글
| [Baekjoon]백준 18258 큐 2(실버 4) - Python (2) | 2024.11.28 |
|---|---|
| [Baekjoon]백준 12789 도키도키 간식드리미(실버 3) - Python (0) | 2024.11.27 |
| [Baekjoon]백준 9012 괄호(실버 4) - Python (0) | 2024.11.25 |
| [Baekjoon]백준 10773 제로(실버 4) - Python (0) | 2024.11.24 |
| [Baekjoon]백준 28278 스택2(실버 4) - Python (0) | 2024.11.23 |