
안녕하세요 !
오늘은 백준 - 균형잡힌 세상 문제를 가져왔습니다.

문제를 해결한 방법은 다음과 같습니다.
- 반복을 통해 입력을 받아주고 종료 조건을 추가합니다.
- 입력받은 문자가 균형있는지 판단하기 위해 함수에 인수로 보내주고 그 반환값이 True이면 yes, False이면 no를 출력합니다.
- 함수에서 문자열을 반복하며 문자가 오른쪽 괄호인 (이거나 [ 이면 스택에 추가합니다.
- 만약 문자가 왼쪽 괄호인 )이거나 ]이고 스택에 마지막 요소가 짝이 맞으면 요소를 제거하고 그 반대이면 False를 반환합니다. 스택에 요소가 없어도 False를 반환합니다.
- 문자열 반복이 끝나고도 스택에 요소가 남아있으면 False를, 그 반대면 True를 반환합니다.
백준 예제에 보면 종료조건인 "."와 입력 문자열인 " ."를 구별해야해서 아래와 같은 코드를 작성했습니다.
while 1: string = sys.stdin.readline() if string.strip() == "." and len(string) == 2: break
result = isValid(string) if result: print("yes") else: print("no")
for i in range(len(string)): if string[i] == '(' or string[i] == '[': stack.append(string[i])
elif string[i] == ")": if len(stack) == 0: return False if stack[-1] == "(": stack.pop() else: return False elif string[i] == "]": if len(stack) == 0: return False if stack[-1] == "[": stack.pop() else: return False
if len(stack): return False return True
import sys
def isValid(string):
stack = []
for i in range(len(string)):
if string[i] == '(' or string[i] == '[':
stack.append(string[i])
elif string[i] == ")":
if len(stack) == 0:
return False
if stack[-1] == "(":
stack.pop()
else:
return False
elif string[i] == "]":
if len(stack) == 0:
return False
if stack[-1] == "[":
stack.pop()
else:
return False
if len(stack):
return False
return True
while 1:
string = sys.stdin.readline()
if string.strip() == "." and len(string) == 2:
break
result = isValid(string)
if result:
print("yes")
else:
print("no")