sm 기술 블로그
154. 4949(균형잡힌 세상) - 파이썬 본문
while True:
S = input()
stack = []
if(S == "."):
break
for val in S:
if val == '[' or val == '(':
stack.append(val)
elif val == ']':
if stack and stack[-1] == '[':
stack.pop()
else:
stack.append(1)
break
elif val == ')':
if stack and stack[-1] == '(':
stack.pop()
else:
stack.append(1)
break
if not stack:
print("yes")
else:
print("no")
문제요약
문자 형식이 맞는지 확인하고 맞으면 yes 틀리면 no를 출력하라.
설명
stack을 이용하면 쉽게 풀 수 있다.
if(S == "."):
break
조건중에 . 이 들어온다면 프로그램을 종료한다.
if val == '[' or val == '(':
stack.append(val)
값이 만약 [ 혹은 ( 라면 그 값은 스택에 저장한다.
elif val == ']':
if stack and stack[-1] == '[':
stack.pop()
else:
stack.append(1)
break
만약 ']' 인 경우 스택이 비어 있지 않고 스택에 맨 마지막이 '[' 일 경우 pop을 통해 꺼낸다.
위에 해당되지 않는 경우에는 1을 집어 넣는다.
elif val == ')':
if stack and stack[-1] == '(':
stack.pop()
else:
stack.append(1)
break
만약 ')' 인 경우 스택이 비어있지 않고 스택에 맨 마지막이 '('일 경우 pop을 통해 꺼낸다.
위에 해당되지 않는 경우에는 1을 집어 넣는다.
if not stack:
print("yes")
else:
print("no")
스택이 비어있다는 것은 완벽한 문자열이라는 뜻으로 yes를 출력한다.
만약 그렇지 않으면 no를 출력한다.
'문제 > 백준_파이썬' 카테고리의 다른 글
156. 17298(오큰수) - 파이썬 (0) | 2022.07.25 |
---|---|
155. 1874(스택 수열) - 파이썬 (0) | 2022.07.22 |
153. 9012(괄호) - 파이썬 (0) | 2022.07.21 |
152. 10773(제로) - 자바 (0) | 2022.07.20 |
152. 10773(제로) - 파이썬 (0) | 2022.07.20 |
Comments