[백준 10799] 쇠막대기

Junyoung Park·2022년 3월 3일
0

코딩테스트

목록 보기
168/631
post-thumbnail

1. 문제 설명

쇠막대기

2. 문제 분석

스택을 통해 스택 안에 있는 쇠막대의 개수를 카운트했다. 레이저를 ( 바로 다음에 )가 올 때 플래그 비트를 통해 파악했다.

  • 본 문제에서 실제 스택만이 아니라 스택을 가장한 카운트만으로도 문제를 풀 수 있다. 가령 (가 들어왔다면 +1을 하는 식으로 스택 내부의 개수를 파악하면 된다. 하지만 이때 0인 경우에 pop을 하게 될 수도 있기 때문에 수를 확인해줘야 한다.

3. 나의 풀이

import sys
from collections import deque

stack = deque()
total = 0
is_laser = False
# ( 바로 다음에 )가 오는 경우에는 레이저로, 스택 내의 쇠막대 개수를 두 배로 만든다.
for s in sys.stdin.readline().rstrip():
    if s == ')':
        stack.pop()
        # 쇠막대든, 레이저든 스택 내의 (를 꺼내자.
        if is_laser:
            # 레이저라면 (이전에 쇠막대로 취급하고 total에 더한) 1을 빼준다.
            total -= 1
            total += len(stack)
            # 늘어난 쇠막대 개수 카운트
        is_laser = False
        # 레이저 스위치를 꺼준다.
    else:
        stack.append('(')
        is_laser = True
        # 쇠막대인지 레이저인지 모르지만 레이저일 수 있으므로 is_laser를 true로
        total += 1
        # 만일 레이저라면 totla -= 1로 조정해줌

print(total)
profile
JUST DO IT

0개의 댓글