[백준] 균형잡힌 세상 4949번
나의 풀이
def check_bracket(sentence):
stack = []
for i in range(len(sentence)):
char = sentence[i]
if char == '(' or char == '[':
stack.append(char)
if char == ')':
if len(stack) != 0 and stack[-1] == '(':
stack.pop()
else:
return False
elif char == ']':
if len(stack) != 0 and stack[-1] == '[':
stack.pop()
else:
return False
return True if len(stack) == 0 else False
isRun = True
while isRun:
sentence = input()
if sentence == ".":
isRun = False
else:
print("yes") if check_bracket(sentence) else print("no")
- check_bracket 메서드를 만들어서 문장을 검증한다. true 가 나오면 'yes'를 false 가 나오면 'no' 를 출력한다. 이 과정을 '.'만 있는 문장이 나올 때 까지 계속 입력받는다.
check_bracket
- 괄호를 담을 스택을 만들어준다.
- 문자열을 반복하면서 문자가 '(' 나 '[' 처럼 여는 괄호라면 스택에 넣어준다.
- 만약 ')' 나 ']' 처럼 괄호를 닫는 문자라면 스택이 비어있지 않고, 스택에서 꺼낸 여는 괄호와 짝이 맞는다면 스택에서 제거해준다. 아니면 짝이 맞지 않기 때문에 false 를 return 한다.
- 그냥 '[' 처럼 여는 괄호만 들어오거나, 괄호가 없는 문장이 들어올 수 있기 때문에 최종적으로 스택이 비어있는지 확인하고 비어있다면 true 를, 아니면 false 를 리턴한다.