Python3/백준 알고리즘

2022.02.24 [백준] (python 파이썬) 균형잡힌 세상

ian's coding 2022. 2. 24. 20:48
728x90
반응형

https://www.acmicpc.net/problem/4949

 

4949번: 균형잡힌 세상

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

www.acmicpc.net


풀이

이 문제는 스택을 사용해서 해결했다. 

입력받은 문자열을 배열에 넣고 만약 배열의 첫번째 인덱스 값이 '.'이면 break를 걸어 while문을 빠져나오게 했다. 그리고 check를 True로 선언하고 만약 괄호의 짝이 맞지 않으면 ( ')'괄호가 나왔을 때, stack이 비어있거나 '[' 괄호가 나오면 짝이 맞지 않음) False로 바꾼뒤 break를 걸어 해당 문자열을 확인하는 while문을 빠져나왔다. 

그리고 '('괄호나 '['괄호가 나오면 stack에 추가해주었다. 

만약 나오는 값이 괄호가 아니면 continue로 넘어가 주었다.

출력할 때, stack이 비어있어도 check가 False면 짝이 맞지 않기 때문에 if의 조건을 not stack and check로 해주었다.

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
while True:
    s=list(input())
    if s[0]=='.':
        break
    stack=[]
    check=True
    while s:
        a=s.pop(0)
        if a=='(':
            stack.append(a)
        elif a=='[':
            stack.append(a)
        elif a==')':
            if stack and stack[-1]=='(':
                stack.pop()
            else:
                check=False
                break
        elif a==']':
            if stack and stack[-1]=='[':
                stack.pop()
            else:
                check=False
                break
        else:
            continue
    if not stack and check:
        print('yes')
    else:
        print('no')
cs

 

 

 

 

 

728x90
반응형