Algorithm & Data Structure/문제 풀이
[4949] 균형잡힌 세상 (Python)
뭉지(moonz)
2021. 6. 21. 15:34
반응형
링크 : https://www.acmicpc.net/problem/4949
4949번: 균형잡힌 세상
하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마
www.acmicpc.net
문제
생각 정리
- 일단 stack으로 하면 된다는 생각까지가 힘들었다.. 만약 stack으로 해줄 수 있다는 걸 알았으면 시간이 더 단축됐을텐데말이다.
- stack을 이용하면 '(' or '[' 는 그냥 입력하고 ')' or ']'는 각각 '(' or '['가 있는지 확인을 해준 후, 있다면 빼주는 것이다.
- stack에 들어가는 것은 '('와 '[' 뿐인 것이다.
- stack이 비어있거나 최상위 값이 '[' or '('가 아닌 경우, 균형을 의미하는 flag 변수를 false로 바꿔준 후 break한다.
- 마지막에 flag 변수와 stack에 값이 남아있는지 확인하여 'yes'를 출력할지 'no'를 출력할지 정한다.
import sys
input = sys.stdin.readline
while True:
s = input()
print(s,'.')
flag = True
if s == '.':
break
stack = []
for i in s:
if i in '([':
stack.append(i)
elif i == ')':
if not stack or stack.pop() != '(':
flag = False
break
elif i == ']':
if not stack or stack.pop() != '[':
flag = False
break
if not stack and flag:
print("yes")
else:
print('no')
계속 '출력초과' 라는 결과가 뜬다. 이 코드의 문제는 무엇일까?
readline()의 공백문자('\n') 때문이다.
그래서 readline() 뒤에 rstrip()을 이용해서 제거해주어야한다. 네번째 line만 다음과 같이 바꿔주면 된다.
s = input().rstrip()
반응형