본문 바로가기
💡Algorithm/python

[python]10799_쇠막대기

by haegomm 2023. 7. 10.

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