[Programmers] level2 - 쇠막대기


풀이
레이저 '()' 와 막대가 끝나는 ')'을 구분하기 위해 last boolean형 변수를 사용했다. ')'가 나올 때마다 막대기 리스트의 막대기 시작 구분자를 pop시킨다. 막대기 하나가 끝날때는 answer가 1만 증가하면 되고 레이저가 막대를 자를 때는 board 리스트에 들어있는 요소의 수 만큼 증가시키면 된다.
1. '('는 막대 리스트에 추가
2. ')'를 확인
2-1. 바로 이전 요소가 '(': 막대 리스트에 있는 막대 수 더하기
2-2. 바로 이전 요소가 ')': 1 더하기
3. 막대 리스트 pop()

나의 풀이
def solution(arrangement):
    board = []
    last = False
    answer = 0
    for a in arrangement:
        if a == ')':
            if last:
                board.pop()
                answer+=1
            else:
                board.pop()
                answer+=len(board)
                last = True
        else:
            board.append(a)
            last = False
 
    return answer
cs

다른 사람의 풀이
def solution(arrangement):
    answer = 0
    sticks = 0
    rasor_to_zero = arrangement.replace('()','0')
 
    for i in rasor_to_zero:
        if i == '(':
            sticks += 1
        elif i =='0' :
            answer += sticks
        else :
            sticks -= 1
            answer += 1
 
    return answer
cs

레이저를 처음부터 0 으로 replace 시켜서 번번이 앞 요소를 체크하는 과정을 없앳다. 크

No comments:

Powered by Blogger.