오늘의 삽질로그
색다르게 이 한 문제에서 마주친 삽질을 기록하면 어떨까 싶어서 적어봅니다 일명 TIL을 가장한 삽질로그! (무려 두세시간 가량을 잡아먹은..)
파이썬을 활용한 문제 풀이입니다
문제: 2504. 괄호의값
https://www.acmicpc.net/problem/2504
대표적인 스택 유형 문제다.
다만, 주어진 괄호가 올바른 괄호냐 아니냐까지는 누구나 쉽게 생각하지만, 중간중간 값을 어떤 식으로 저장하냐가 관건일듯! 생각해야 할 반례도 많고 까다로운 문제다.
나는 하나의 스택에 괄호와 계산한 결과를 같이 넣는 방식으로 풀었다.
삽질 남바원
if b == '(' or '[':
ㅎ뭐가 틀렸게요....? 놀랍게도 아무 생각없이 저렇게 적어서 처음에 스택이 하도 이상하게 작동하길래 뭔가 싶었다
삽질 남바투
typeerror: 'str' object is not callable
typeerror: 'int' object is not callable
(놀랍게도 오늘 이거 둘 다 봤다!)
이런 게 뜬다는 건... 너가 그 어딘가 예약어를 변수명으로 썼다는 것..
ㄱㅣ억해..⭐️
삽질 남바쓰리: aka. 반례파티
여기서부턴 자강두천 반례 싸움이였다..🔥 고려해야 될 반례가 너무 많아서 다 적을 순 없을 거 같다.
내가 걸렸던 건 '()([]', '[]]' 이런 테스트케이스들이였다.
이 분 답변 참고하시면 도움될 거 같네요..!!
(반례 화수분이여서 너무 감사했습니다🙇♀️
👉 https://www.acmicpc.net/board/view/30310
최종 코드
bracket_str = input()
def get_bracket_val(string):
stack = []
bracket_val = 0
for b in string:
if b == '(' or b == '[':
stack.append(b)
else:
if not stack: return 0
if b == ')':
if stack[-1] == '(':
stack.pop()
stack.append('2')
elif stack[-1] == '[': return 0
elif stack[-1].isdigit():
total = 0
while stack and stack[-1].isdigit():
total += int(stack.pop())
if not stack: return 0
if stack[-1] == '(':
stack.pop()
push_val = total * 2
stack.append(str(push_val))
elif stack[-1] == '[': return 0
else: #b == ']'
if stack[-1] == '[':
stack.pop()
stack.append('3')
elif stack[-1] == '(': return 0
elif stack[-1].isdigit():
total = 0
while stack and stack[-1].isdigit():
total += int(stack.pop())
if not stack: return 0
if stack[-1] == '[':
stack.pop()
push_val = total * 3
stack.append(str(push_val))
elif stack[-1] == '(': return 0
for x in stack:
if x.isdigit(): bracket_val += int(x)
else: return 0
return bracket_val
print(get_bracket_val(bracket_str))
Author And Source
이 문제에 관하여(오늘의 삽질로그), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dldbdud314/오늘의-삽질로그저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)