Bonfire

99클럽 코테 스터디 22일차 TIL Leetcode Remove K Digits 본문

알고리즘/99 코테 스터디

99클럽 코테 스터디 22일차 TIL Leetcode Remove K Digits

pecan 2024. 6. 20. 05:23

Leetcode Remove K Digits

기본 아이디어는 숫자를 하나씩 체크하면서 작아지는 숫자가 그 숫자보다 큰 수들을 빼면서 k값을 줄여주는 것이었다.

문제를 다 풀고 다른 사람들 코드를 보고 나니 같은 코드인데 짧게 정리된 걸 보니 어떻게 저렇게 정리해서 생각할 수 있을지 궁금하다..  

아직 아이디어에 비해 구현력이 부족하다는 걸 느꼈다.

나의 코드

import sys
class Solution:
    def removeKdigits(self, num: str, k: int) -> str:
        i=0
        stack=[]
        sys.set_int_max_str_digits(10**5)
        while k>0 and i<len(num):
            if stack:
                if int(stack[-1])<=int(num[i]):
                    stack.append(num[i])
                else:
                    while k>0 and stack and int(stack[-1])>int(num[i]):
                        stack.pop()
                        k-=1
                    stack.append(num[i])
            else:
                if num[i]!=0:
                    stack.append(num[i])
            i+=1

        if i<len(num):
            stack.extend(num[i:])
        while k>0 and stack:
            x=stack.pop()
            k-=1
            if stack:
                if int(stack[-1])>=int(x):
                    stack.pop()
                    stack.append(x)
        if k>0 or not stack:
            return "0"
        else:
            return str(int("".join(stack)))