[Level2] 큰 수 만들기

Quesuemon·2021년 3월 25일
0

코딩테스트 준비

목록 보기
10/111

🛠 문제

https://programmers.co.kr/learn/courses/30/lessons/42883


👩🏻‍💻 해결 방법

처음에 조합을 이용해서 풀었는데 엄청난 시간초과가 났었다...
문제를 풀기 위해서는 숫자들을 하나씩 접근해야 했다
이미 저장된 숫자(max_num[-1])와 새롭게 저장될 숫자(num)를 비교하며 최댓값을 만들어 나갈 수 있었다
제거되어야 할 갯수인 k만큼 제거가 되지 않았을 경우도 생각해줘야 한다...

소스 코드

def solution(number, k):
    max_num = []
    
    for i, num in enumerate(number):
        while max_num and max_num[-1] < num and k > 0:
            max_num.pop()
            k -= 1
        
        if k == 0:
            max_num += number[i:]
            break
        
        max_num.append(num)
    
    max_num = max_num[:-k] if k > 0 else max_num
    answer = "".join(max_num)
    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)

0개의 댓글