문제
2504번: 괄호의 값
4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일
www.acmicpc.net
알고리즘
- 입력받은 괄호를 반복문을 통해 확인한다.
- "(" 와 "[" 이면 스택에 추가해준다.
- ")" 경우와 "]" 경우는 조건문을 통해 나눠서 코드를 작성한다.
코드
import sys
s = str(sys.stdin.readline().strip())
stack = []
# 입력받은 괄호를 반복문을 통해 확인한다.
for i in s:
# i가 "(", "[" 일 경우 스택에 추가
if i == "(" or i == "[":
stack.append(i)
else:
if stack and i == ')':
# 스택의 길이가 1보다 크고 스택 맨 뒤에 두번째 요소가 "("이고 스택 맨 뒤에 요소가 숫자일 경우
# "()" 괄호 안에 들어 있는 숫자 이므로 (2 * x) 를 해준다.
if len(stack) > 1 and stack[-2] == "(" and str(stack[-1]).isdigit():
cnt = stack.pop() * 2 # 숫자 팝
stack.pop() # "(" 팝
stack.append(cnt)
# 스택의 맨 뒤에 요소가 "("일 경우
# "()" 괄호 이므로 2를 스택에 추가
elif stack[-1] == '(':
stack.pop() # "(" 팝
stack.append(2)
# 그 외의 문자열은 올바르지 못한 괄호
else:
stack.append("fall")
break
elif stack and i == ']':
# 스택의 길이가 1보다 크고 스택 맨 뒤에 두번째 요소가 "["이고 스택 맨 뒤에 요소가 숫자일 경우
# "[]" 괄호 안에 들어 있는 숫자 이므로 (3 * x) 를 해준다.
if len(stack) > 1 and stack[-2] == "[" and str(stack[-1]).isdigit():
cnt = stack.pop() * 3 # 숫자 팝
stack.pop() # "[" 팝
stack.append(cnt)
# 스택의 맨 뒤에 요소가 "["일 경우
# "[]" 괄호 이므로 3을 스택에 추가
elif stack[-1] == '[':
stack.pop()
stack.append(3)
# 그 외의 문자열은 올바르지 못한 괄호
else:
stack.append("fall")
break
# # 그 외의 문자열은 올바르지 못한 괄호
else:
stack.append("fall")
break
# 스택의 길이가 1보다 크고 스택의 맨 뒤 두번째 요소와 맨 뒤에 요소가 숫자일 경우 두 요소를 더해준다.
if len(stack) > 1 and str(stack[-1]).isdigit() and str(stack[-2]).isdigit():
stack.append(stack.pop() + stack.pop())
# 스택의 길이가 1이고 숫자일 경우 스택의 값을 출력
if len(stack) == 1 and str(stack[-1]).isdigit():
print(*stack)
# 그 외에는 올바르지 못한 괄호 이므로 0을 출력
else:
print(0)
github
GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법
내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.
github.com
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 5397번(파이썬): 키로거 (0) | 2021.10.04 |
---|---|
[baekjoon] 백준 9375번(파이썬): 패션왕 신해빈 (0) | 2021.10.03 |
[baekjoon] 백준 1620번(파이썬): 나는야 포켓몬 마스터 이다솜 (0) | 2021.10.01 |
[baekjoon] 백준 2493번(파이썬): 탑 (0) | 2021.09.30 |
[baekjoon] 백준 11286번(파이썬): 절댓값 힙 (0) | 2021.09.29 |