티스토리 뷰

728x90
반응형

문제

www.acmicpc.net/problem/4949

 

4949번: 균형잡힌 세상

하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마

www.acmicpc.net

 

코드

while True:
    s = input()
    
    if s == '.':
        break
    stack = []
    answer = True

    for i in s:
        
        if i =='(' or i == '[':
            stack.append(i)
            
        elif i == ')':
            if len(stack) == 0:
                answer = False
                break
            if stack[-1] == '(':       
                stack.pop()
            else:
                answer=False
                break
        elif i ==']':
            if len(stack) == 0:
                answer = False
                break
            if stack[-1] == '[':
                stack.pop()
            else:
                answer = False
                break
    
    
    if answer and not stack:
        print("yes")
    else:
        print("no")

 

코드설명

입력값 '.' 이 들어올때까지 무한루프를 돈다.

 

'(' 또는 '[' 괄호가 들어오면 stack에 넣어주고

 

')' 들어왔을때는 스택을 검사해 비어있다면 false를 주고 break문으로 빠져나간다. 만약 비어 있지 않다면 stack에 가장 위에 값을 검사해 괄호 짝이 맞다면 pop을 해주고 괄호 짝이 안맞다면 false를 주고 break문으로 빠져나간다.

 

']' 들어왔을때는 스택을 검사해 비어있다면 false를 주고 break문으로 빠져나간다. 만약 비어 있지 않다면 stack에 가장 위에 값을 검사해 괄호 짝이 맞다면 pop을 해주고 괄호 짝이 안맞다면  false를 주고 break문으로 빠져나간다.

 

for문을 다 돌고 True 이면서 stack 안에 값이 비어있다면 괄호 짝이 맞는것이기 때문에 YES를 출력한다.

false라면 NO를 출력한다.

 

반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 2108번 통계학 (Python)  (0) 2021.03.15
[백준] 1260번 DFS와 BFS (Python)  (0) 2021.03.14
[백준] 18258번 큐 2 (Python)  (0) 2021.03.13
[백준] 9012번 괄호 (Python)  (1) 2021.03.13
[백준] 10828번 스택 (Python)  (0) 2021.03.13
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30