✅문제 - 괄호의 값(2504번)
✅사용 개념 및 알고리즘
◼ 자료구조 : 위의 문제는 괄호를 닫아줄 때 가장 마지막에 넣은 값과 현재 괄호를 비교해야하기 때문에 Stack 자료구조를 사용해야한다.
◼ 알고리즘
1) 값을 임시로 저장할 변수 tmp를 1로 설정한다.
2) [ or ( 을 만나면 tmp에 2 또는 3을 곱해준다.
3) 괄호를 닫을 때 적합성 판단을 한다. 만약 스택이 비어있거나 stack[-1]과 현재 괄호가 매칭되지 않으면 answer = 0 으로 만들고 break 한다.
4) 앞의 괄호가 여는 괄호일 경우 answer 에 현재 tmp를 더해준다.
5) 괄호를 닫았으므로 tmp 값을 2 or 3으로 나누어준다.
❓ 위의 4) 과정에서 왜 앞에 여는 기호가 있을 때만 값을 더해줄까?!
만약 앞에 기호가 닫는 기호일 경우 우리가 여는 기호를 사용했을 때 tmp에 곱해준 2 or 3을 지워주는 역할만 하기 때문이다!
✅코드
import sys
sentence = sys.stdin.readline().rstrip()
stack = []
tmp = 1
answer = 0
for i in range(len(sentence)):
if sentence[i] == '(':
stack.append(sentence[i])
tmp *= 2
elif sentence[i] == '[':
stack.append(sentence[i])
tmp *= 3
elif sentence[i] == ')':
if not stack or stack[-1] != '(':
answer = 0
break
if sentence[i-1] == '(': answer += tmp
tmp //= 2
stack.pop()
elif sentence[i] == ']':
if not stack or stack[-1] != '[':
answer = 0
break
if sentence[i-1] == '[': answer += tmp
tmp //= 3
stack.pop()
if stack: answer = 0
print(answer)
'Algorithm & Data Structure' 카테고리의 다른 글
[백준] 별자리 만들기 (4386번) - Python (1) | 2023.05.31 |
---|---|
[백준] 타임머신 (11657번) - Python/Algorithm (0) | 2023.03.29 |
[백준] 동전1 (2293번) - Python / 알고리즘 (0) | 2023.02.13 |
[백준] 내리막 길 (1520번) - Python/알고리즘 (0) | 2023.02.10 |
[백준] 이분 그래프 (1707번) - Python / 알고리즘 (0) | 2023.02.09 |