2022 하계 모각코
[2022 모각코] 5회차 (2022.07.16.)
수빈최
2022. 7. 16. 22:52
학습 목표
: 파이썬 학습
학습 내용
: 백준 문제풀이(2504번)를 통한 파이썬 학습
https://www.acmicpc.net/problem/2504
2504번: 괄호의 값
4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일
www.acmicpc.net
s = input()
stack = []
tmp = 1
result = 0
for i in range(len(s)):
if s[i] == '(':
tmp *= 2
stack.append(s[i])
elif s[i] == '[':
tmp *= 3
stack.append(s[i])
elif s[i] == ')':
if not stack or stack[-1] == '[':
res = 0
break
if s[i-1] == '(':
res += tmp
tmp //= 2
stack.pop()
else:
if not stack or stack[-1] == '(':
res = 0
break
if s[i-1] == '[':
res += tmp
tmp //= 3
stack.pop()
if stack:
result = 0
print(result)
학습 결과(풀이)
: 입력 받은 문자열을 읽어 열린 괄호를 만나면 스택에 넣어주고, 닫힌 괄호를 만났을 경우 stack에서 하나씩 꺼내어 쌍을 맞춘다. 이 문제에서는 ( 소괄호와 [ 대괄호를 사용하기 때문에 쌍이 맞지 않을 경우도 고려하여 소괄호이며 짝이 맞을 경우 2, 대괄호이며 짝이 맞을 경우 3을 곱해주어야한다. 계산값은 괄호의 갯수를 세어 누적해두었다가 마지막에 모두 곱하여 결과값을 출력한다. 만약 stack에 값이 남아있다면 짝이 맞지 않는 것이므로 0을 출력한다.