1번 문제.
https://www.acmicpc.net/problem/2504
-> 괄호의 값
import sys
from collections import deque
# 괄호 입력
# 앞에서부터 빼주며 비교하기 위해
bracket = deque(sys.stdin.readline().strip())
# print(bracket)
# 괄호 안의 요소들을 하나씩 비교
def cal(start):
# 값을 더해줄 변수 설정
br_result = 0
while bracket:
# 괄호들에서 왼쪽부터 하나씩 빼서 반환할 변수
# 하나씩 빼서 나열한 값들이 존재한다.
after_pop = bracket.popleft()
# 시작하는 괄호과 뺀 괄호가 각각 모두 존재한다면,
if start == '(' and after_pop == ')':
# 만약 둘 다 존재한다면, 1보다 큰 수일 것이고, 그 큰 수에 2를 곱한 값을 반환
# 아니면 1 값을 최대값으로 반환하여 더하는 값을 2로 반환한다.
br_result = 2 * max(1, br_result)
return br_result
elif start == '[' and after_pop == ']':
br_result = 3 * max(1, br_result)
return br_result
# 만약 여는 괄호가 ( 거나 [ 둘 중에 하나면, 재귀함수를 통해 다시 함수를 돌린다.
elif after_pop == '(' or after_pop == '[':
br_result += cal(after_pop)
# 잘못된 괄호일 경우에 0을 내보낸다.
print(0)
# 파이썬의 코드를 끝나는 즉시 중단
sys.exit()
# 최종값을 더해줄 변수
result = 0
# 괄호가 존재하지 않을때까지 반복문을 돌려준다.
while bracket:
# 최종값에 반환된 값들을 각각 더해준다.
result += cal(bracket.popleft())
print(result)
=======================================================
처음에 잘 모르겠어서 다른 사람들의 코드들을 많이 참고했다.
대부분이 스택을 이용해서 풀었는데, 솔직히 너무 복잡해보여서 좀 보기 싫게 생겼다... 사실 자료구조에 많이 약하다..
그래서 재귀 함수를 이용해서 푸는 방법들을 참고했다.