본문 바로가기

# 소쿠리 개발 공부방/코테 문제풀이

[BAEKJOON] [4949] 균형잡힌 세상: PYTHON

[4949] 균형잡힌 세상

문자열이 주어졌을 때 균형잡힌 문자열인지 아닌지를 판단

 

4949번: 균형잡힌 세상

각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에

www.acmicpc.net

Input

  • 각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어짐
  • 길이는 100글자보다 작거나 같음
  • 입력의 종료조건으로 맨 마지막에 온점 하나(".")

Output

  • 각 줄마다 해당 문자열이 균형을 이루고 있으면 "yes"를, 아니면 "no"를 출력

 

✨ Solve

1. 여는 괄호가 나오면 스택에 추가

2. 닫는 괄호가 나왔을 경우

    2-1 스택이 비어있으면 올바르지 않은 괄호쌍

    2-2 스택의 top이 짝이 맞지 않는 괄호일 경우 올바르지 않은 괄호 쌍

    2-3 스택의 top이 짝이 맞는 괄호일 경우 pop

3. 모든 과정을 끝낸 후 스택에 괄호가 남아있으면 올바르지 않은 괄호쌍

 

💻 Code

### 언어 python3, 메모리 31256KB, 시간 220ms

sentences = []
while True:
    sentence = input()
    if sentence == '.':
        break
    sentences.append(sentence)
    

answers =[]
for sentence in sentences:
    stack = []
    pos = 0

    line = list(sentence)
    for item in line:
        if item == '(' or item =='[':
            stack.append(item)
        elif item ==')' :
            if len(stack) == 0:
                answers.append('no')
                break
            elif stack[-1] =='(':
                stack.pop()
            else:
                answers.append('no')
                break
                
        elif item ==']': 
            if len(stack) == 0:
                answers.append('no')
                break
            elif stack[-1] =='[':
                stack.pop()
            else:
                answers.append('no')
                break
               
        elif item =='.':
            if len(stack) == 0:
                answers.append('yes')
                break
                
            else:
                answers.append('no')
                break

for answer in answers:
    print(answer)

 

🎯 Question

없음