본문 바로가기
algorithm/coding test

프로그래머스 - 큰수만들기 (파이썬)

by su0a 2024. 4. 15.

number에서 k개의 숫자를 삭제해서 만들 수 있는 최대한 큰수를 만들어야 한다.

number을 앞에서부터 돌면서 i+1번째 인덱스의 숫자가 i번째 인덱스보다 크면 앞에 숫자를 삭제해 주고 k를 1 감소시켰다. 

number을 한바퀴 돌아도 k가 남아있다면 number에 있는 숫자중 가장 작은값을 없애는 방식으로 k를 1씩 감소시켰다.

 

def solution(number, k):
    answer = ''
    i=1
    while(k>0): 
        if number[i]>number[i-1]:
            number=number[:i-1]+number[i:]
            k-=1
            if i>1:  #i-1번째 인덱스를 제거했으므로 i번째 인덱스는 i-1번째 인덱스가 됨
                i-=1
        else:
            i+=1
            if len(number)==i:
                break
    
    while(k>0):  #k가 아직 남아있는 경우
        min_val,min_i=10000000,0
        number_arr=list(number)
        for i in range(0,len(number_arr)):
            tmp=int(number_arr[i])
            if min_val>tmp:
                min_val=tmp
                min_i=i
        del number_arr[min_i]
        number=''.join(number_arr)
        k-=1
    
    return number