[백준10799_파이썬(python)] - 쇠막대기

경이·2023년 6월 20일
0

🔴 문제

쇠막대기


🟡 Sol

s = input()
s = s.replace("()", "0")
check = 0
stack = ''
for i in s:
    if i == '0' and check == 0:
        continue
    elif i == "(":
        check -= 1
    elif i == ")":
        check += 1
    stack += i
    
answer = 0
check = ''
s = stack
stack = 0
for i in s:
    check += i
    if i == ")":
        index = check.rindex("(")
        answer = answer + check[index:].count('0') + 1
        check = check[0:index] + check[index+1:]

print(answer)

🟢 풀이

레이저가 지나가는 () <- 이 부분을 아래와 같이 0으로 replace 해준다.
()(((()())(())()))(()) => 0(((00)(0)0))(0)
이 후 괄호로 안감싸진 0은 지워버리면 (((00)(0)0))(0) << 이 상태가 된다.
이 문자열을 돌면서 )를 만나면 그 짝을 찾아서 그 사이의 0의 개수 + 1 을 해 최종 정답을 구함
(2+1) + (1+1) + (4+1) + (4+1) + (1+1) = 17

처음에는 rindex를 몰라서 문자열 => 리스트 => 문자열 변환했더니 시간초과가 났다
찾아봤더니 rindex 문자열을 사용해서 오른쪽에서부터 특정 문자를 찾아 인덱스를 반환할 수 있었다.
그리고, 문자열은 del 키워드가 먹히지 않는데 특정 인덱스의 문자을 삭제하고 싶을 땐 문자열 슬라이싱을 이용해 두 문자열을 합쳐주면 된다.!!


🔵 Ref

profile
이사중입니다!🌟https://velog.io/@devkyoung2

0개의 댓글

관련 채용 정보