1. 문제
https://www.acmicpc.net/problem/4949
4949번: 균형잡힌 세상
하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 각 줄은 마침표(".")로 끝난다
www.acmicpc.net
2. 풀이
while True:
# 각 문자열 한 줄씩 입력
s = input()
# 입력된 문자열이 .인 경우 반복문 break
if s == '.':
break
# 대괄호, 소괄호를 append, pop할 list
s_list = []
balance = True
for i in s:
if i == '(':
s_list.append('(')
elif i == ')':
if len(s_list) == 0:
balance = False
break
if s_list.pop() != '(':
balance = False
break
elif i == '[':
s_list.append('[')
elif i == ']':
if len(s_list) == 0:
balance = False
break
if s_list.pop() != '[':
balance = False
break
if len(s_list) > 0 or not balance:
print('no')
else:
print('yes')
3. 후기
- 처음 문제를 보고 대괄호와 소괄호를 각각 개수로 생각하여 괄호가 열리면 +, 닫히면 -를 하는 방식을 생각해보았는데 '([)]'와 같이 엇갈린 형태의 괄호를 커버하지 못하는 문제가 있었다. 위와 같은 프로세스의 형태는 보았을때 스택으로 해결해보려는 생각을 먼저 해보도록 해야겠다.
'알고리즘 공부 > 백준' 카테고리의 다른 글
(Python)백준 코딩테스트 연습 - 제로(10773) (0) | 2023.01.09 |
---|---|
(Python)백준 코딩테스트 연습 - 카드2(2164) (2) | 2023.01.09 |
(Python)백준 코딩테스트 연습 - 동전 0(11047) (0) | 2023.01.08 |
(Python)백준 코딩테스트 연습 - 돌 게임(9655) (0) | 2023.01.08 |
(Python)백준 코딩테스트 연습 - 수 정렬하기 4(11931) (0) | 2023.01.07 |