흰 스타렉스에서 내가 내리지

[프로그래머스] 110 옮기기 ⭐️ - 문자열 처리 본문

Problem Solving

[프로그래머스] 110 옮기기 ⭐️ - 문자열 처리

주씨. 2024. 5. 8. 20:57
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/77886

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

 

# 문자열 안에서 서브 문자열 찾기 

스택을 사용하면 선형시간에 해결할 수 있다. 

문자열 슬라이싱 보다는 del 명령어를 사용하면 실행시간이 현저하게 줄어든다. 

def solution(s):
    answer = []
    
    for e in s:
        removed, cnt = devide(e)
        answer.append(get(removed, cnt))
        
    return answer


def get(s, cnt):
    idx = s.rfind('0') + 1

    if idx == -1:
        s = '110'*cnt + s
    else:
        s = s[:idx] + '110'*cnt + s[idx:]
    
    return s



def devide(s):
    stack = []
    cnt = 0
    
    for c in s:
        if len(stack) >= 2 and stack[-2] == '1' and stack[-1] == '1' and c == '0':
            del stack[-1]
            del stack[-1]
            cnt += 1
        else:
            stack.append(c)

            
    return ''.join(stack), cnt