프로그래머스) 110 옮기기

엄강우·2022년 8월 20일
0

110 옮기기

def makeNew(x):
    result = ''
    ones = ''
    cnt = 0
    for i in x:
        if i == '0':
            if len(ones) < 2:
                ones += '0'
                result += ones
                ones = ''
            else:
                cnt += 1
                ones = ones[2:]
        else:
            ones += i       
    
    for i in range(cnt):
        result += '110'
    result += ones
    
    return result           
                
def solution(s):
    return [makeNew(x) for x in s]

풀이 해설

  1. 110이라는 숫자를 몇개 나 만들 수 있는지에 대해 체크 해야한다.

  2. 사전적 순서를 빠르게 하기 위해서는 몇 가지 생각해야 할 필요가 있다.

    110보다 사전적으로 앞으로 와야하는 조합은 100이다.

    그리고 110이 있으면 1을 모두 뒤로 밀어 버릴 수 있다.

    그래서 100은 만날때 마다 result에 붙여준다. (100은 자리를 움직일 수 가 없기에 나올 때 마다 더해주면 된다.)

    그리고 110의 조합은 만들어질 때마다 cnt에 갯수를 저장한다.

    마지막으로 result110을 계산된 갯수만큼 더 해주고 나머지 조합을 잃은 1들을 뒤에 더해주면 된다.

    111000을 예로 들면

    ## for 문
    
    result = "100"
    cnt = 1
    
    ## for 문
    
    return "100110" 
profile
안녕하세요 프론트엔드 개발자를 꿈꾸는 엄강우입니다.

0개의 댓글