Coding Test/프로그래머스

[프로그래머스 42883번] 큰 수 만들기

Lucian_Cho 2020. 12. 20. 02:36

# 문제

 


내 풀이
def solution(number, k):
    answer = ''
    idx = 0  # 매 단계에서 가장 큰 숫자의 인덱스
    while k > 0:  # 제거할 것이 있을 때까지
        max_val = '-1'
        start_idx = idx  # 이번 단계의 시작 인덱스를 기록
        # 시작 인덱스부터 뒤로 k + 1개 만큼 탐색하여 가장 큰 수 찾음
        for i in range(idx, idx + k + 1):
            if eval(number[i] + '>' + max_val):
                max_val = number[i]
                idx = i
            # 만일 찾은 수가 9라면 뒷 부분은 더 탐색하지 않고 루프 종료
            if max_val == '9':
                break
        answer += number[idx]
        k -= idx - start_idx  # 이번 단계에 제거한 숫자의 개수를 차감
        idx += 1
        # 만일 제거할 개수가 남았는데 가장 큰 숫자를 얻었다면, 그대로 리턴
        if len(answer) + k == len(number):
            return answer

    answer += number[idx:]  # 제거가 끝난 후, 아직 체크하지 않은 남은 뒷부분을 답에 추가
    return answer

 

지향할 답안
def solution(number, k):
    stack = [number[0]]
    for num in number[1:]:
        while len(stack) > 0 and stack[-1] < num and k > 0:
            k -= 1
            stack.pop()
        stack.append(num)
    if k != 0:
        stack = stack[:-k]
    return ''.join(stack)

 

문제점
 테스트 케이스에 따라 처리속도가 오래 걸린다.

 

개선할 점
 스택의 도입으로 알고리즘을 훨씬 효율적으로 처리할 수 있다.