반응형
4949번: 균형잡힌 세상
하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마
www.acmicpc.net
코드
import sys
while 1:
inp = sys.stdin.readline().rstrip()
stack = []
error = 0
if inp == ".":
break
else:
for i in inp:
if i == "(":
stack.append(i)
elif i == ")":
if len(stack) == 0: # 스택이 비어있으면 no 출력
error = 1
break
else:
if stack[-1] == "(": # 가장 최근 괄호가 ( 이면
stack.pop() # 스택에서 pop 해줌
else:
error = 1
break
elif i == "[":
stack.append(i)
elif i == "]":
if len(stack) == 0:
error = 1
break
else:
if stack[-1] == "[":
stack.pop()
else:
error = 1
break
if (error == 0) and (len(stack)==0):
print("yes")
else:
print("no")
설명
sys.stdin.readlin()으로 문자열을 입력받으면 마지막에 \n이 붙어서 저장되기 때문에 .rstrip()을 추가해서 제거해줘야 된다.
스택을 이용해서 만약 "("이나 "["이 들어오면 스택에 push를 해주고, ")"나 "]"가 들어오면 현재 스택의 가장 위에 있는 값과 비교하여 같으면 그 값을 pop 해주고 다르면 괄호가 짝이 맞지 않는 것이기 때문에 error 변수를 1로 만들어준 후 break로 for문을 빠져나온다.
for문을 나온 후 만약 error값이 1이 아니고 스택도 다 비어있으면 yes를 출력해주고 그렇지 않으면 no를 출력해준다.
반응형
'알고리즘 > 자료구조' 카테고리의 다른 글
[백준][Python] 1021번 회전하는 큐 (0) | 2022.02.15 |
---|---|
[백준][Python] 3986번 좋은 단어 (0) | 2022.02.14 |
[백준][Python] 22942번 데이터 체커 (0) | 2022.02.11 |
[백준][Python] 10845번 큐 (0) | 2022.02.11 |
[백준][Python] 2800번 괄호 제거 (0) | 2022.02.11 |
댓글