일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Kotlin
- 1260
- 홈화면
- 앱
- 11057
- 9095
- 1182
- permutation
- 백준
- 11053
- 괄호
- 코틀린
- 6603
- 11기
- 매일11시
- 11054
- expo
- 나머지
- lcm
- 순열
- LCS
- 파이썬
- itertools
- Combination
- 최소공배수
- 뒤로가기
- 코테
- Android
- 안드로이드
- Python
Archives
- Today
- Total
황소개발자
백준 2504 파이썬 python : 괄호의 값 @@황소처럼 우직하게@@ 원리를 알면 참 재밌는 문제 본문
반응형
import sys
input = sys.stdin.readline
brackets = input().strip()
def check_brakcets(ss):
stack = []
for s in ss:
if s == '(' or s == '[':
stack.append(s)
elif s == ')' and stack:
if stack[-1] == '(':
stack = stack[:-1]
else:
stack.append(s)
elif s == ']' and stack:
if stack[-1] == '[':
stack = stack[:-1]
else:
stack.append(s)
else:
stack.append(s)
if stack:
return False
else:
return True
def sol(ss):
stack = []
for s in ss:
if s == '(' or s == '[':
stack.append(s)
elif s == ')':
if stack[-1] == '(':
stack[-1] = 2
else:
tmp = 0
for i in range(len(stack) - 1, -1, -1):
if stack[i] == '(':
stack[-1] = tmp * 2
break
else:
tmp += stack[i]
stack = stack[:-1]
elif s == ']':
if stack[-1] == '[':
stack[-1] = 3
else:
tmp = 0
for i in range(len(stack) - 1, -1, -1):
if stack[i] == '[':
stack[-1] = tmp * 3
break
else:
tmp += stack[i]
stack = stack[:-1]
return sum(stack)
if check_brakcets(brackets) == False:
print(0)
else:
print(sol(brackets))
제가 괄호문제에 트라우마가 있었는데, 원리를 알고나니 참 쉽네요
바로 '스택' 입니다.. 스택 문제라는 것만 알았어도 풀었을텐데 작년코테 ㅠㅠ
왜 스택이라고 생각못했을까 반성합니다.
우선 문제풀이는
1. 일단 올바른 괄호가 맞는가?
2. 계산
이 순서로 진행됩니다.
위 출력은 스택을 매번 출력하도록 한 결과입니다.
저런식으로 구현해주시면 됩니다.^^
반응형
'백준 문제 풀이' 카테고리의 다른 글
백준 1966 파이썬 python : 프린터 큐 @@황소처럼 우직하게@@ (0) | 2020.02.26 |
---|---|
백준 1182 파이썬 python : 부분수열의 합 @@황소처럼 우직하게@@ (0) | 2020.02.26 |
백준 14499 파이썬 python : 주사위 굴리기 @@황소처럼 우직하게@@ 깔끔하게 풀기 (0) | 2020.02.26 |
백준 13458 파이썬 python : 시험감독 @@황소처럼 우직하게@@ (0) | 2020.02.26 |
백준 7568 파이썬 python : 덩치 @@황소처럼 우직하게@@ (0) | 2020.02.23 |
Comments