[백준] 11899번 괄호 끼워넣기 . python

sun1·2023년 3월 21일
0

백준

목록 보기
15/16
post-thumbnail

문제

' 11899번 괄호 끼워넣기 '
https://www.acmicpc.net/problem/11899


Check point

📌 스택 (stack)

💡 스택이란?

  • 물건을 쌓아 올리듯 자료를 쌓아 올린 형태의 자료구조
    => 데이터의 삽익과 삭제가 데이터의 가장 한쪽 끝에서만 일어나는 자료구조

💡 스택 특성

  • 선형 구조 : 자료 간의 관계가 1 : 1 ( vs 트리 (비선형 구조 = 1 : N 관계))
  • 후입선출 (Last-In-Frist-Out) : 가장 마지막으로 추가된 항목을 가장 첫번째로 제거

💡 스택 연산

  • push : 데이터 삽입
  • pop : 데이터 삭제 -> pop() : 가장 마지막 데이터 삭제
  • top : 가장 마지막에 삽입한 데이터를 삭제하지 않고 return
  • isEmpty : 스택이 비어있는지 여부 확인
  • peek : 스택의 top에 있는 원소를 반환

📌 풀이 조건

  • ( 가 나오기 전에 ) 가 먼저 나온다면 ( 를 붙여야 하므로 붙여야 할 괄호 갯수 +1
  • 쌍을 다 맞춘 후에도 ( 가 존재한다면 ) 를 붙여야 하므로 붙여야 할 괄호 갯수 +1

코드

python

S = input()
stack = []
total = 0
for s in S:
    if s == '(':  # 여는 괄호를 만나면 stack에 추가
        stack.append(s)
    elif s == ')' and stack == []:  # 닫는 괄호를 만났는데 stack이 비어있다면
        total += 1  # ( 를 붙여야 하므로 붙여야 할 괄호 갯수 +1
    elif s == ')' and stack:  # 닫는 괄호를 만났는데 stack이 비어있지 않다면
        stack.pop()  # 괄호 쌍 완성 -> stack에서 제거
if stack != 0:  # stack에 남아있는 ( 가 있다면
    total += len(stack)  # ) 를 붙여야 하므로 붙여야 할 괄호 갯수 + 남은 갯수
print(total)

정리 코드

S = input()
stack = []
total = 0
for s in S:
    if s == '(':
        stack.append(s)
    elif s == ')' and stack == []:
        total += 1
    elif s == ')' and stack:
        stack.pop()
if stack != 0:
    total += len(stack)
print(total)

0개의 댓글