OkBublewrap

2024-12-03 TIL (Python - Stack) 본문

Today I Learning

2024-12-03 TIL (Python - Stack)

옥뽁뽁 2024. 12. 3. 09:59

파이썬 - 균형잡힌 세상

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

 

1. 배운 개념 / 주제

  • pop() : 리스트의 맨 마지막 요소를 리턴하고 그 요소는 삭제한다.
a = [1, 2, 3]
a.pop() # pop() = pop(-1)
# 3

a
# [1, 2]

 

2. 배경 / 왜 배우게 되었는지

  • 자료 구조 공부 중 스택을 공부하다가 잘 쓰지 않았던 pop 개념 복습

 

3. 핵심 내용.

  • 스택은 LIFO 구조이고, 가장 마지막에 추가된 요소를 제거해야 한다.
  • pop()은 맨 위 요소를 꺼내는 데 적합하다.

 

4. 사용법 / 문제 풀이

  1. 마지막으로 '.' 으로 끝나는 문장이다.
  2. 괄호에는 소괄호, 대괄호를 사용한다.
  3. 괄호가 짝지어지지 않으면 no, 짝지어있으면 yes 출력
while True:
  s = input() # 문자열 변수
  if s == '.': # '.' 으로 끝나면 break
    break

  stack = [] # 데이터 쌓을 스택(리스트) 
  balanced = True # 균형이 맞는지 확인하는 불리언 값

  for i in range(len(s)): # 문자열 크기 만큼 돌면서 괄호 스택 쌓기
    if s[i] == '(' or s[i] == '[':
      stack.append(s[i])

    if s[i] == ')': # 닫는 소괄호를 만났을 때, 쌓은 소괄호가 없으면 불균형
      if len(stack) == 0: 
        balanced = False
        break

      last = stack.pop(-1)
      if last != '(':  # 소괄호는 '('와 비교
        balanced = False
        break
      
    if s[i] == ']': # 닫는 대괄호를 만났을 때, 쌓은 대괄호가 없으면 불균형
      if len(stack) == 0:
        balanced = False
        break

      last = stack.pop(-1)
      if last != '[':  # 대괄호는 '['와 비교
        balanced = False
        break

  if len(stack) != 0:  # 모든 괄호가 짝지어져야 함
    balanced = False

  if balanced:
    print('yes')
  else:
    print('no')

 

 


 

 

 

'Today I Learning' 카테고리의 다른 글

2024-12-05 TIL (큐)  (0) 2024.12.05
2024-12-04 TIL (SQL - generate_series)  (0) 2024.12.04
2024-12-02 TIL (Funnel)  (0) 2024.12.02
WIL - 1주차  (1) 2024.11.30
2024-11-29 TIL (데이터 잘보기)  (1) 2024.11.29