728x90
galho = input()
stack = []
total = 0
for i in range(len(galho)):
if galho[i] == "(": #1
stack.append(galho[i])
elif galho[i] == ")":
if galho[i-1] == "(": #2
total += len(stack) - 1
stack.pop()
elif galho[i-1] == ")": #3
total += 1
stack.pop()
print(total)
#1 : i가 '(' 인 경우 stack에 삽입
#2 : galho[i]가 ')'이고 galho[i-1]는 '('인 경우는 레이저를 쏘는 경우이므로 스택에 쌓여있는 '(' 의 개수 -1 만큼 total에 추가 그리고 스택의 top에서 요소하나 삭제( '(' 삭제 )
#3 : galho[i]가 ')'이고 galho[i-1]도 ')'인 경우는 괄호를 닫는 경우이므로 total +1추가 그리고 ')'과 짝을 이루는 '('도 stack의 top에서 삭제
1. 레이저 쏘기는 쌓인 만큼의 막대기의 숫자 추가
2. 닫기는 막대기 1개 추가
이 2가지를 기억하면 코드를 이해할 수 있다.
예시를 보면
()(((()())(())()))(())
3 + 3 + 1 + 3 + 1 + 2 + 1 + 1 + 1 + 1 = 17
쏘기 + 쏘기 + 닫기 + 쏘기 + 닫기 + 쏘기 + 닫기 + 닫기 + 쏘기 + 닫기
728x90
'[Coding Test] > [백준]' 카테고리의 다른 글
[백준] 10773 파이썬(python) : 제로 (0) | 2022.06.17 |
---|---|
[백준] 2812 파이썬(python) : 크게 만들기 - (★) (0) | 2022.06.16 |
[백준] 10828 파이썬(python) : 스택 (0) | 2022.06.16 |
[백준] 8958 파이썬(python) : OX퀴즈 (0) | 2022.06.16 |
[백준] 1427 python(파이썬) : 소트인사이드 (0) | 2022.06.13 |