■ 문제풀이
- 기본적인 자료구조 pop, append를 사용한 문제입니다.
- 각 막대기 '(' 모양일 경우 stack에 append 합니다.
- 각 막대기 ')' 모양일 경우 조건이 두 가지 입니다. ')' 막대기가 나오기 이전 '(' 일 경우 stack에 쌓인 막대기를 pop 시킨 후 남아 있는 막대기 개수를 더합니다.
- ')' 막대기가 나오기 이전 ')'일 경우 stack에 쌓인 막대기를 pop 시킨 후 잘린 막대기의 끄트머리 개수를 +1 시킵니다.
■ 문제해답
import sys
input = sys.stdin.readline
bar_razor = list(input().rstrip())
answer = 0
stack = []
for i in range(len(bar_razor)):
if bar_razor[i] == '(':
stack.append('(')
else:
if bar_razor[i - 1] == '(':
stack.pop()
answer += len(stack)
else:
stack.pop()
answer += 1
print(answer)
■ 문제출처
https://www.acmicpc.net/problem/10799
10799번: 쇠막대기
여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저
www.acmicpc.net
'Algoritm > BOJ' 카테고리의 다른 글
[BOJ] 1158번: 요세푸스 문제 (0) | 2022.09.11 |
---|---|
[BOJ] 10845번: 큐 (0) | 2022.09.06 |
[BOJ] 1406번: 에디터 (0) | 2022.09.06 |
[BOJ] 1874번: 스택 수열 (0) | 2022.09.06 |
[BOJ] 9012번: 괄호 (0) | 2022.09.06 |