[Python] 백준10799번 : 쇠막대기

hjeu·2025년 2월 16일

백준

목록 보기
35/48
post-thumbnail

💡문제

백준 10799번 문제 링크

🍀풀이

이번 문제는 이해는 바로 됐는데 어떻게 풀어야하는지에 대한 생각이 오래 걸렸다.
문제를 봤을 때 () 레이저가 나오면 그 전에 나온 괄호만큼 개수를 쳐주는거까지는 생각을 했는데 그럼 그 다음꺼는?에서 어떻게 해야할지에 대해 생각을 못했다. 지금 푼 입장으로 거의 다온거였는데 오래걸리다니...

일단 코드를 보자

코드

import sys
input = sys.stdin.readline

iron_bar = input().strip()
stack = []
result = 0

for i in range(len(iron_bar)):
    if iron_bar[i] == "(":			# '('가 나오면 스택에 계속 쌓음
        stack.append('(')
    else:							# ')'가 나오면
        stack.pop()					# 우선 pop을 함
        if iron_bar[i-1] == "(":	# 그리고 이전에 '(' 이게 있으면 레이저니까 
            result += len(stack)	# 쇠막대기 개수 추가
        else:
            result += 1				# 이전 값이 ')'면 쇠막대기의 끝이니 개수 추가 
            
print(result)

주석을 살짝 달긴 했는데 추가로 얘기를 하면
왜 pop을 먼저 하냐면 레이저여도 그 전꺼를 pop 해야하고, 쇠막대기의 끝이면 여는 괄호도 빼야하니 pop을 한다.
그리고 남아있는 스택값을 계속 더하면 한번에 연산 가능!

이거를 생각해내는게 핵심이었던거 같다(내 생각)
나도 척척 떠올랐으면....


profile
나는야 개발왕이 될거야! (๑ •̀ω•́)۶

0개의 댓글