백준 10799 쇠막대기

김민영·2023년 1월 8일
0

알고리즘

목록 보기
40/125

계획

  • 전체 모든 값을 넣을 스택과, 레이저를 제외하고 쇠막대기 개수를 넣을 변수를 만듦
  • 입력을 받을 때, 입력 받을 값과 스택의 마지막 값을 비교
    • 입력이 ( 이면 스택에 추가하고 쇠막대기 개수에 +1
    • 입력이 ) 이면
      • 레이저의 끝인 경우 ( 스택 마지막 값이 (임 ) 현재 쇠막대기 개수를 -1 한 후, 정답에 추가, 스택에 넣음
      • 쇠막대기의 끝인 경우 ( 스택 마지막 값이 )임 ) 스택만 추가
import sys
inp = list(input())
stack = []
sub_stack = 0
ans = 0
for i in inp:
    if i == "(":
        sub_stack += 1
        stack.append(i)
    else:
        if stack[-1] == "(":  # 레이저인 경우
            stack.append(i)
            sub_stack -= 1  # 레이저 시작 부분 뺌
            ans += sub_stack
        else:  # 나무 끝인 경우
            stack.append(i)
            sub_stack -= 1  # 나무 시작부분 뺌
            ans += 1
print(ans)
  • 쇠막대기에 관한 스택도 만들었는데, 개수만 필요해서 숫자로 표현해도 된다.
  • 레이저 끝인 ) 와 쇠막대기 끝인 ) 구분 주의
profile
노션에 1차 정리합니당 - https://cream-efraasia-f3c.notion.site/4fb02c0dc82e48358e67c61b7ce8ab36?v=

0개의 댓글