본문 바로가기

코딩테스트/Python

[Python] 백준 #4949 - 균형잡힌 세상

문제


 

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

 

4949번: 균형잡힌 세상

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

www.acmicpc.net

 

 

풀이


import sys
input=sys.stdin.readline

while True:
    arr = input()[:-1]
    if arr=='.': 
        break  
    else: arr=list(arr)
    stack=[]
    for idx in arr:
        if idx=='(' or idx=='[':
            stack.append(idx)
        elif idx==')':
            if len(stack) and stack[-1]=='(':
                stack.pop()
            else:
                print("no")
                break
        elif idx==']':
            if len(stack) and stack[-1]=='[':
                stack.pop()
            else:
                print("no")
                break
    else:
        print("no") if len(stack) else print("yes")

스택으로 풀었다. (와 [을 스택에 넣어주면서 검사하였다.

 

  1. sys.stdin.readline으로 시간 단축, 이때 제일 마지막 개행문자를 없애주기위해[:-1] 사용
  2. 만약 . 이 입력되었으면 break하고 아니면 리스트로 만들어준다.
  3. 스택을 사용하기 위해 스택 선언
  4. 리스트로 만들어준 arr을 반복문으로 돌린다. 
  5. 이때 ( 이거나 [ 이 나오면 스택에 더해준다.
  6. 만약 ) 이 나오면 스택의 제일 마지막이 (인지 확인해준다. 이때 스택의 길이 체크도 해준다. 만약 (이 아니면 no 출력
  7. ] 도 6번과 마찬가지로 진행
  8. 끝까지 다돌렸는데 만약 스택에 ( 이나 [ 이 남아있으면 즉, 길이가 1 이상이면 no 출력

 

 

느낀점


스택은 너무 재밌다!!!! 아직까지 스택에서 내가 푼 문제들은 다 거기서 거기같음.. 언제 어려운 문제가 나올까

 

'코딩테스트 > Python' 카테고리의 다른 글

[Python] 백준 #18258 - 큐 2  (1) 2021.12.07
[Python] 백준 #1874 - 스택 수열  (1) 2021.12.05
[Python] 백준 #9012 - 괄호  (0) 2021.12.02
[Python] 백준 #10773- 제로  (0) 2021.12.01
[Python] 백준 #10828 - 스택  (0) 2021.12.01