[Programmers] 110 옮기기

2021. 7. 25. 11:13Programming/Problem Solving

728x90

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

 

코딩테스트 연습 - 110 옮기기

0과 1로 이루어진 어떤 문자열 x에 대해서, 당신은 다음과 같은 행동을 통해 x를 최대한 사전 순으로 앞에 오도록 만들고자 합니다. x에 있는 "110"을 뽑아서, 임의의 위치에 다시 삽입합니다. 예를

programmers.co.kr

 

110은 한 세트로 무조건 움직여야 한다는 개념만 가지면 된다.

그리고 110이 만들어지면 그 이전에건 신경쓰지 않아도 된다.

 

def solution(s):
    answer = []
    for num in s:
        answer.append(go(num))
    return answer
def go(num: str):
    ind = 0
    cnt = 0
    st = []
    numres = ""
    for i in range(len(num)):
        if len(st) > 2 and st[-1] == "0" and st[-2] == "1" and st[-3] == "1":
            for j in range(3):
                st.pop()
            cnt += 1
        st.append(num[i])
    if len(st) > 2 and st[-1] == "0" and st[-2] == "1" and st[-3] == "1":
        for i in range(3):
            st.pop()
        cnt += 1
    for i in range(len(st)):
        numres += st[i]
    res = "110"*cnt
    check = False
    for i in range(len(numres)-1, -1, -1):
        if numres[i] == "0":
            numres = numres[:i+1]+res+numres[i+1:]
            check = True
            break
    if check is False:
        numres = res + numres
    return numres