■ 문제 해설
· 이전 괄호 (prev) 를 이용해서 해결
· '(' 쇠막대기인 경우 stack에 append
· 이전 값 (prev) 와 s[i] 값이 ')'인 경우 => 레이저
1) 괄호를 맞추기 위해 stack에 pop
2) stack에 들어간 쇠막대기 수만큼 더함
· 이전 값 (prev) 와 s[i] 값이 ')'인 경우 => 쇠막대기가 끝난 경우
1) 쇠막대기 절단하여 +1
· 이전 값 (prev) = s[i]로 값 초기화
■ 문제 해답
import sys
input = sys.stdin.readline
s = list(input().rstrip())
stack = []
result = 0
prev = None
for i in range(len(s)):
if s[i] == '(':
stack.append(s[i])
elif prev == '(' and s[i] == ')':
stack.pop()
result += len(stack)
elif prev == ')' and s[i] == ')':
result += 1
stack.pop()
prev = s[i]
print(result)
문제출처 : https://www.acmicpc.net/problem/10799
10799번: 쇠막대기
여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저
www.acmicpc.net
'Algoritm > BOJ' 카테고리의 다른 글
[BOJ] 13023번: ABCDE (0) | 2022.04.14 |
---|---|
[BOJ] 1935번 : 후위 표기식2 (1) | 2021.09.16 |
[BOJ] 1158번 : 요세푸스 문제 (0) | 2021.09.12 |
[BOJ] 10845 : 큐 (0) | 2021.09.11 |
[BOJ] 9093번 : 단어뒤집기 (0) | 2021.09.08 |