ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 큰 수 만들기(Lv2)
    알고리즘 2020. 8. 6. 18:59

     

    200728 기상 : 5시 40분

    200729 : 아직 안 잠(2시)

    이 문제 언제 했지 저번 달에 했나 7월 초에 했나?

     


     

    문제 설명

    어떤 숫자에서 k 개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다. 예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24]를 만들 수 있습니다. 이 중 가장 큰 숫자는 94입니다.

    문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요.

    제한 조건

    number는 1자리 이상, 1,000,000자리 이하인 숫자입니다.

    k는 1 이상 number의 자릿수 미만인 자연수입니다.

     

     

    입출력 예

     

    number

    k

    return

    1924

    2

    94

    1231234

    3

    3234

    4177252841

    4

    775841

     

    첫 번째

    첫 번째 (16.7점) 시간 초과..

    모든 경우의 수를 생각해서 틀림. ( 순서를 생각해야 함)

    import itertools # 라이브러리 가져오기
    def solution(number, k):
        answer = ''
        # k를 뺀 글자 수에 해당하는 모든 경우의 수 다 가져옴
        tmp =list(map(''.join,itertools.permutations(number,len(number)-k)))
        answer =max(tmp)# 가장 큰값 
        
        return answer# 정답

     

     

    두 번째

    (_순서 생각 못 했음 순서 지키기 )

    9점 나옴.ㅎ 예제는 다 맞음, 테스트 중 2개는 시간 초과

    661일 경우 계속 돌아감

    def solution(number, k):
        number=list(number) #list로 만들어서 비교할라고
        i=0
        # k 가 소진될 때까지
        while k>0:
            # 앞에 있는 숫자보다 클 경우
            if number[i]<number[i+1]:
                # 앞에 삭제 
                number.pop(i)
                # 삭제했으니까 k도 -1
                k-=1
            else :
                # 작을경우, i그냥 넘기기
                i+=1
                # 다 돌았을 경우, k없어질때까지 계속 돌기
                if len(number)-1==i:
                    i=0
                    # 남은거 join 해주기 
        return ''.join(number)

     

     

    다른 사람 풀이

    def solution(number, k):
        answer = ''
        for i in number:
            # answer 에 맨 뒤에 값과 비교 i가 더 클 경우,
            while len(answer) > 0 and int(answer[-1]) < int(i) and k > 0:
                k -= 1 # 값제거
                answer = answer[:-1]# -1은 맨 뒤에값 맨뒤에 값 포함 안함 
            answer += i # 값 추가 일단 한번씩은 다 들어감. 근데 while에서 걸러짐.
        # 다 돌아도 남아있을 경우, 
        # 값이 중복이 있는 경우 이 조건문에 들어감.
        # 661 
        if k > 0:
            answer = answer[:-k]# 남아있는 K 값 만큼 뒤에 값 빼기. 
        return answer

     

     


    느낀 점

    요즘 한없이 우울하다

    난 왜 이렇게 못할까

    위에 언제 썼지 아냐 할 수 있다 다시 해야지

     

     

     

     

     

    댓글

Designed by Tistory.