본문 바로가기
프로젝트들/코딩 테스트

[코딩테스트] 프로그래머스 - 큰 수 (Lv.2) in Python 파이썬

by 코곰 2021. 2. 13.

임의의 수 number에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 수를 return.

 

ex. number = 1924, k = 2

     가능한 수의 집합 = [19, 12, 14, 92, 94, 24]

     이 중 가장 큰 수 94를 return!

 

프로그래머스 강의를 바탕으로 코드를 작성했습니다.

 

programmers.co.kr/learn/courses/30/lessons/42746

 

풀이법

결과적으로 앞 자리가 클수록 큰 수이므로,

bucket을 하나 만들어,

number에서 한 숫자씩 담되,

지금 bucket에 들어간 수보다 넣을 수가 더 크면,

그 둘을 교환한다. (k가 남아있는 동안)

 

number의 모든 숫자를 거친 후에는 (탐색이 끝난 후에는)

bucket에 있는 수들을 이어 붙여 반환하면 된다.

 

예외 - 큰 숫자들이 이미 앞에 있어, bucket에 수를 담고도 k가 남아있으면, 뒤에서부터 k 자릿수만큼 떼고 반환.

ex. number = 9876, k = 1

~> bucket에는 9, 8, 7이 담기고, k는 여전히 1

~> 따라서, bucket[:-k]를 반환

 

코드 구현!

 

def solution(number, k):
    bucket = []
    
    for i, x in enumerate(number):
        while len(bucket) > 0 and bucket[-1] < x and k > 0:
            bucket.pop()
            k -= 1
        if k == 0:
            bucket += list(number[i:])
            break
        bucket.append(x)
        
        
     bucket += bucket[:-k] if k > 0 else bucket
     
     return ''.join(bucket)

 

로직을 잘 세우고 코드로 구현하니 좋다.

 

메모

- enumerate()

enumerate(iterable, start=0)

Parameters:
     Iterable: any object that supports iteration
     Start: the index value from which the counter is to be started, by default it is 0

=> list, string에서 index와 value 모두 필요시 유용하게 쓰일 수 있다.

댓글