BOJ 10799 쇠막대기

LONGNEW·2021년 1월 31일
0

BOJ

목록 보기
130/333

https://www.acmicpc.net/problem/10799
시간 1초, 메모리 256MB
input :

  • 괄호 표현이 공백없이 주어진다.(길이는 최대 100000)

output :

  • 조각의 총 개수를 나타내는 정수

조건 :

  • 각 쇠막대기를 자르는 레이저는 적어도 하나 존재한다.
  • 레이저는 어떤 쇠막대기의 양 끝점과도 겹치지 않는다.
  • 레이저는 여는 괄호와 닫는 괄호의 인접한 쌍 ‘( )’ 으로 표현된다. 또한, 모든 ‘( )’는 반드시 레이저를 표현한다.
  • 쇠막대기의 왼쪽 끝은 여는 괄호 ‘ ( ’ 로, 오른쪽 끝은 닫힌 괄호 ‘) ’ 로 표현

cnt에 현재 까지 '('의 개수를 left로 기록한다.
레이져의 경우 '(' ')'로 이루어져 있는데 이것을 생각해줘서
cnt -= 1을 먼저 해주고 total에 cnt를 더해줘야 한다.

레이져의 ')'이 아니라 쇠막대기의 마지막인 ')'인 경우에는
마지막 남은 1조각이 있기 떄문에 total에 1을 더해주고
cnt에서 1을 빼준다.(쇠막대기는 인제 존재하지 않으니까)

import sys

stick = sys.stdin.readline().strip()
cnt = 0
total = 0
for idx, item in enumerate(stick):
    if item == '(':
        cnt += 1
    else:
        if stick[idx - 1] == '(':
            cnt -= 1
            total += cnt
        else:
            cnt -= 1
            total += 1
print(total)

0개의 댓글