문제 풀이/백준
[S4] 백준 4949 - 균형잡힌 세상 (Python3)
gnoJJ
2023. 1. 14. 14:14
https://www.acmicpc.net/problem/4949
4949번: 균형잡힌 세상
하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 각 줄은 마침표(".")로 끝난다
www.acmicpc.net
이 문제보다 한 단계 쉬운 문제는 백준 9012번: 괄호라고 생각한다. 이 문제를 풀고나서 이 문제를 푸는 것을 추천한다.
해결방법
스택을 활용하는 문제이다. bracket 이라는 리스트 변수에 여는 괄호("(", "[")를 담고, 닫는 괄호(")", "]")가 나올 때마다 bracket의 원소를 pop 해주는 방식으로 문제를 풀었다.
코드
while (string:=input()) != ".":
bracket = []
for w in string:
if w in ['(', '[']:
bracket.append(w)
elif w == ')':
if len(bracket) > 0 and bracket[-1] == '(':
bracket.pop()
else:
break
elif w == ']':
if len(bracket) > 0 and bracket[-1] == '[':
bracket.pop()
else:
break
else:
print("no" if len(bracket) > 0 else "yes")
continue
print("no")
코드 설명
- while의 조건식 부분을 바다코끼리 연산자(':=')를 활용해 작성했다.
- for-else 문을 활용해서 작은 예외의 경우에도 처리 가능하도록 했다. 이전 내 코드의 반례가 '(' 나 '[' 처럼 여는 괄호가 하나만 있는 경우였다. 이를 처리하도록 짠 코드이다.
예전의 나라면 아래 코드처럼 작성했을 것 같다.
string = input()
while string != ".":
"""
solution
"""
string = input()
이렇게 작성하면 괜히 같은 코드를 반복하게 되면서 가독성에도 떨어진다고 생각했다. 그래서 바다코끼리 연산자를 활용한 것이다.