1 걸린 시간 : 40m
2 사용한 자료구조 및 개념 : strip, replace
💡 문제풀이 아이디어 및 어려웠던 점
💫 아이디어
1️⃣ 양끝 레이저를 삭제한다.
2️⃣ 여는 괄호 ( 이 나오면 stack(잘린 막대기 갯수) 에 +1 해준다.
3️⃣ 닫는 괄호 )가 나오고 이전 괄호가 여는 괄호 ( 이라면 레이저이므로 stack에서 -1해주고 stack을 answer에 더해준다.
4️⃣ 그냥 닫는 괄호 ( 가 나오면 막대기의 끝이므로 answer +1 해주고 막대기 하나가 끝났으니 stack 에서도 -1 해준다.
👻 어려웠던 점
🤔 닫는 괄호가 나왔을 때 이전 괄호랑 굳이 비교하는 과정이 썩 마음에 들지 않았다.
그래서 replace 메서드를 활용하여 () 한 쌍의 괄호 자체를 다른 문자 ' | ' 로 바꾸어주었더니 불필요한 연산들(3번 과정)이 없어질 수 있었다.
🤔 if - else 구문을 if - elif 로 조건분기 처리를 변경하였다.
if - else 로 하면 else에 들어가서 또 조건 검사를 해야하는데 if - elif로 하면 if구문이 거짓일 때만 elif구문을 검사하므로 불필요한 연산을 조금 더 줄일 수 있었다.
for i in stick.replace('()', '|'):
if i == '(':
stack += 1
else:
if i == '|':
answer += stack
else:
answer += 1
stack -= 1
for i in stick.replace('()', '|'):
if i == '(':
stack += 1
elif i == '|':
answer += stack
else:
answer += 1
stack -= 1
Solution Code & 주석
stick = input()
stick.strip('()')
stack = 0
answer = 0
for i in range(len(stick)):
if stick[i] == '(':
stack += 1
else:
if stick[i - 1] == '(':
stack -= 1
answer += stack
else:
answer += 1
stack -= 1
print(answer)
최적화 Code
stick = input()
stick.strip('()')
stack = 0
answer = 0
for i in stick.replace('()', '|'):
if i == '(':
stack += 1
elif i == '|':
answer += stack
else:
answer += 1
stack -= 1
print(answer)
'💡Algorithm > python' 카테고리의 다른 글
[python]2800_괄호 제거 (0) | 2023.07.12 |
---|---|
[python]2504_괄호의 값 (0) | 2023.07.11 |
[python]1874_스택 수열 (0) | 2023.07.06 |
[python]2346_풍선 터뜨리기 (0) | 2023.07.05 |
[python]1966_프린터 큐 (0) | 2023.07.04 |