/ 제출 1 /
이 문제가 스택을 활용하는 유형이라는 것을 알면 그래도 접근하는 난이도가 확 낮아진다. 그래서 그 부분을 눈치 챌 수 있어야겠다. 보통 이렇게 나열식이고 짝 맞춰서 뭔가가 이뤄지는 건 스택일 확률이 높다.(백퍼센트 아니닌까 혹시나헤매지 말것. 확률이 높긴 하니까 의심의 실마리 정도)
import sys
input = sys.stdin.readline
brackets = input()
stack = []
result = 0
for b in brackets:
if not stack:
stack.append(b)
continue
if b == '(':
stack.append('(')
if b == ')':
if stack[-1] == '(':
stack.pop()
stack.append(1)
else:
k = 0
while stack[-1] != '(':
k += stack.pop()
stack.pop()
result += k + 1
stack.append(k)
print(result)
로직을 생각하는게 까다로운 문제였다. 레이저일 때, 끝과 끝이 완성됐을 때 두 가지 케이스를 나누고 각각 케이스에서 어떤 동작을 해줄 지를 떠올려야 했다.
레이저뿐일 때는 1개 값을 일단 넣고,
끝과 끝이 만나지면 모인 레이저만큼 갈라준다고 생각해 레이저 값 + 1을 그 막대의 길이로 생각해서 결과값에 더한다.
이 때 겹쳐졌는데 아직 안 끝난 막대를 위해 모인 레이저는 다시 넣어줬다.
다시 넣어주는 과정에서 내 착각으로 중복이 생겼는데,
결과값에만 1을 더해줘야 하는데, K값 자체에 1을 더해서 그 다음 막대를 계산할 때는 허수의 레이저값이 추가되었다.
그래서 해당부분을
위의 사진과 같이 고쳤다.
아무리 생각해도 나는 지금 실버 3-1정도 레벨인 듯.. 딱 요정도 문제들이 30분 내로 풀린다..
한 달(도 아니고 2-3주) 내로 골드 3-1까지 어떻게든 끌어올려야 한다.
'CodingTest > Baekjun Online Judge' 카테고리의 다른 글
[ BOJ / 파이썬 ] 10026 적록색약 (0) | 2022.08.16 |
---|---|
[ BOJ / 파이썬 ] 2504 괄호의 값 (0) | 2022.08.15 |
[ BOJ / 파이썬 ] 3986 좋은 단어 (0) | 2022.08.15 |
[ BOJ / 파이썬 ] 5430 AC (0) | 2022.08.15 |
[ BOJ / 파이썬 ] 1021 회전하는 큐 (0) | 2022.08.14 |