4/7 스터디 문제

hyejun sang·2022년 4월 7일
0

알고리즘

목록 보기
16/28
post-thumbnail

1번 문제.
https://www.acmicpc.net/problem/2504
-> 괄호의 값

1번 문제 풀이 코드

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)

=======================================================
처음에 잘 모르겠어서 다른 사람들의 코드들을 많이 참고했다.
대부분이 스택을 이용해서 풀었는데, 솔직히 너무 복잡해보여서 좀 보기 싫게 생겼다... 사실 자료구조에 많이 약하다..
그래서 재귀 함수를 이용해서 푸는 방법들을 참고했다.

0개의 댓글