글 작성자: 택시 운전사
반응형

👷‍♀️ 쇠막대기 문제 풀어보기


😃 나의 코드

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

스택/큐 알고리즘 카테고리에 속한 문제입니다. 이 문제는 스택을 이용해 풀어야합니다. 우선 레이저에 해당하는 ()()이 아닌 다른 문자 하나로 바꾸줍니다 여기서는 Lazer에 해당하는 L로 바꿔주었습니다. stack라는 list를 만들어 왼쪽부터 enumerate를 이용하여 탐색합니다.

	if c == '(': 
	    stack.append('(')
	    answer += 1
	elif c == ')':
	    stack.pop()
	else:
	    answer += len(stack)

우선 받은 문자가 (일 때입니다. stack(를 추가해주고 쇠막대기 수를 하나 추가합니다. 다음은 )일 때입니다. 막약 stack의 마지막 요소가 (이라면 stack의 스택을 pop해줍니다. 이는 막대기의 끝이라는 뜻입니다. 마지막으로 L이라면 레이저이기 때문에 stack의 크기 즉, 현재 레이저가 자르는 쇠막대기의 갯수만큼 추가합니다.

Written with StackEdit.


반응형