import sys
commend = sys.stdin.readline().rstrip()
stick = [] # 쇠막대기 스택
result = 0
def addone(n):
return n+1
for i in range(len(commend)):
if commend[i] == '(':
if commend[i+1] == ')': # ()가 나온 경우 쇠막대기 스택의 각 요소에 +1
stick = list(map(addone,stick))
else:
stick.append(1) # ( 가 나온 경우 다음이 )가 아니면 쇠막대기 push
elif commend[i] == ')':
if commend[i-1] != '(': # )가 레이저가 아닌 경우 쇠막대기 pop하여 결과에 합연산
result += stick.pop()
print(result)
처음에 작성한 코드이다
시간 초과가 나서 함수와 map을 빼고 재구성하였다
import sys
commend = sys.stdin.readline().rstrip()
stick = [] # 쇠막대기 스택
result = 0
for i in range(len(commend)):
if commend[i] == '(':
if commend[i+1] == ')': # ()가 나온 경우 스택의 길이(막대기 수)만큼 결과에 +
result += len(stick)
else:
stick.append(1) # ( 가 나온 경우 다음이 )가 아니면 쇠막대기 스택에 push
elif commend[i] == ')':
if commend[i-1] != '(': # )가 쇠막대기의 끝일 경우 pop하여 1만큼 결과에 +
result += stick.pop() # ㄴ막대기의 최초값 1을 고려
print(result)
'알고리듬' 카테고리의 다른 글
[17299] 오등큰수 (0) | 2022.09.16 |
---|---|
[17298] 오큰수 (0) | 2022.08.16 |
[17413] 단어 뒤집기 2 (0) | 2022.03.11 |
[10866] 덱 (0) | 2022.02.28 |
[1158] 조세퍼스 (0) | 2022.02.18 |