My Code
def Ck_Laser(arr):
if arr[0]=='(' and arr[1]==')':
return True
else:
return False
def Ck_in_line(Laser_num):
if len(Laser_num)>0:
return True
else:
return False
def solution(arr):
ans=0
arr=list(arr)
Laser_num=[]
while arr:
ck_L=Ck_Laser(arr)
ck_in=Ck_in_line(Laser_num)
# print(arr)
# print(Laser_num)
# print('ans:{}'.format(ans))
# print(ck_in)
if ck_in==False: #현재 막대기 밖에 있음
if ck_L==True: #레이저 만나면
for i in range(2):
arr.pop(0) #걍 레이저 제거
else:
arr.pop(0) #막대기 시작
Laser_num.append(0) #조각 수 세기 위한 공간 할당
else: #현재 막대기 안에 있음
if ck_L==True: #레이저 만나면
#현재 지나고 있는 막대기의 레이저 수 전부에 +1
for i in range(len(Laser_num)):
Laser_num[i]+=1
for i in range(2):
arr.pop(0) #레이저 제거
elif arr[0]=='(':
arr.pop(0) #막대기 시작
Laser_num.append(0) #조각 수 세기 위한 공간 할당
elif arr[0]==')':
arr.pop(0)
ans+=(Laser_num.pop()+1)
return ans
Better Code
def solution(arrangement):
answer = 0
arrangement = arrangement.replace("()","L")
stack = []
for idx, c in enumerate(arrangement):
if c == '(':
stack.append('(')
answer += 1
elif c == ')':
stack.pop()
else:
answer += len(stack) #스택길이가 막대기 개수이고, 한번 레이저마다 막대기 개수만큼 조각늘어남
return answer