Koala - 11기/코딩테스트 준비 스터디
[백준/python] 4949번 균형잡힌세상
ㄱㅈㅅㅇ
2023. 8. 14. 00:49
4949번: 균형잡힌 세상
각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에
www.acmicpc.net
문제 풀이
단지 (,)와 [,]가 짝을 이루어 있는지만 확인하는 문제이다. 이는 스택을 이용하여 쉽게 풀 수 있다. 온점을 이용하여 입력을 알린다. EOF문제인걸로알고있는데 정확히 코드의 형식을 지켜야한다~ 이런형식이 있다~는 아직 모르겠어서 while문에 if종료조건 달아줬다. (,[는 리스트에 append해주고 ),]가 온다면 바로 전에 (,[가 있는지 확인한다. 있다면 잘하고있는것이므로 기존(,[를 삭제해주고 만약 아니라면 균형을 잃은것이니 일단 넣어두고 후에 이 리스트의 크기가 0이 아니라면 no를 출력한다. (이러한 생각으로 코드를 구현하다보면 빈리스트에 (가 있고없고 확인하다가 에러난다. 따라서 @과 같은 입력에 안들어가는 문자를 하나 넣어주고 마지막에 길이가 1이다 아니다를 기준으로 출력한다)
소스코드
while 1:
a = list(input())
b = ['@']
if a[0] == '.': break
i = 0
while True:
if a[i] == '.': break
if a[i] == '[' or a[i] == '(':
b.append(a[i])
if a[i] == ']':
if b[-1] == '[':
b.pop()
else:
b.append(a[i])
if a[i] == ')':
if b[-1] == '(':
b.pop()
else:
b.append(a[i])
i += 1
if len(b) == 1:
print("yes")
else:
print("no")