*문제 출처는 백준에 있습니다.
문제 제목: 괄호의 값 / 2504번 (골드 5단계)
문제 사이트: https://www.acmicpc.net/problem/2504
문제 설명

나의 풀이
def solution(arr):
answer = 0
stack = [] # 스택을 사용할 배열
add_value = 1 # 현재 상태를 보고 더해줄 변수
for i in range(len(arr)):
if arr[i] == '(':
stack.append(arr[i])
add_value *= 2
elif arr[i] == '[':
stack.append(arr[i])
add_value *= 3
elif arr[i] == ')':
if not stack or stack[-1] == '[': # 실패
answer = 0
break
if arr[i - 1] == '(':
answer += add_value
stack.pop()
add_value //= 2
elif arr[i] == ']':
if not stack or stack[-1] == '(': # 실패
answer = 0
break
if arr[i - 1] == '[':
answer += add_value
stack.pop()
add_value //= 3
if stack:
return 0
else:
return answer
def main():
words = input() # 올바른 괄호
print(solution(words))
main()

※ 알아야 할 것
for i in range(len(arr)):
if arr[i] == '(':
stack.append(arr[i])
add_value *= 2
elif arr[i] == '[':
stack.append(arr[i])
add_value *= 3
elif arr[i] == ')':
if not stack or stack[-1] == '[': # 실패
answer = 0
break
if stack[-1] == '(':
answer += add_value
stack.pop()
add_value //= 2
elif arr[i] == ']':
if not stack or stack[-1] == '(': # 실패
answer = 0
break
if stack[-1] == '[':
answer += add_value
stack.pop()
add_value //= 3
위 코드는 실패하는 코드입니다. 이유는 다음과 같습니다!
(()[]) 경우에서 answer += add_value를 stack[-1] == '('인지 확인한 뒤 추가하는 방식이라서, 괄호 구조를 고려하지 못하고 잘못된 값을 더할 수 있습니다. 특히, (()[])처럼 )가 연속되거나 [ ]가 끼어 있는 경우, answer를 더할 타이밍이 어긋날 수 있습니다.
'Coding Test > 백준-Python' 카테고리의 다른 글
| 백준 / 안전 영역 / 2468번 / Python (0) | 2025.03.17 |
|---|---|
| 백준 / 2×n 타일링 2 / 11727번 / Python (0) | 2025.03.16 |
| 백준 / 등수 매기기 / 2012번 / Python (0) | 2025.03.13 |
| 백준 / A와 B / 12904번 / Python (0) | 2025.03.12 |
| 백준 / 빗물 / 14719번 / Python (0) | 2025.03.11 |