728x90

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

728x90

+ Recent posts