ν‹°μŠ€ν† λ¦¬ λ·°

728x90
λ°˜μ‘ν˜•

문제

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - 큰 수 λ§Œλ“€κΈ°

 

programmers.co.kr

 

문제 풀이

 μ–΄λ–€ μˆ«μžμ—μ„œ K개의 수λ₯Ό μ œκ±°ν–ˆμ„ λ•Œ 얻을 수 μžˆλŠ” κ°€μž₯ 큰 숫자λ₯Ό κ΅¬ν•˜λŠ” λ¬Έμ œμ΄λ‹€. 문제λ₯Ό ν’€κΈ° μœ„ν•΄μ„œλŠ” `stack`을 μ‚¬μš©ν•˜λ©΄ ν•΄κ²°ν•  수 μžˆλ‹€.

 

  • `stack`에 값이 μ—†λ‹€λ©΄ 수λ₯Ό `append` ν•œλ‹€.
  • `stack`에 값이 μžˆλ‹€λ©΄ ν˜„μž¬μ˜ μˆ˜μ™€ `top`을 λΉ„κ΅ν•˜μ—¬ 값이 값이 크지 μ•ŠλŠ” 경우 `pop`ν•œλ‹€.
    • λ¬Έμ œμ— μ œκ±°ν•  수 μžˆλŠ” `K`κ°€ μ£Όμ–΄μ§€λ―€λ‘œ, 이 μ—­μ‹œ 같이 νŒλ‹¨ν•˜μ—¬μ•Ό ν•œλ‹€.
  • λ§Œμ•½ `K`κ°€ 0이 λœλ‹€λ©΄ μ¦‰μ‹œ μ€‘λ‹¨ν•˜κ³ , 남은 μˆ˜λ“€μ„ `stack`에 μ‚½μž…ν•œλ‹€.

 

μ½”λ“œ

def solution(number, k):
    stack = []

    for i, num in enumerate(number):
        while stack and stack[-1] < num and k > 0:
            stack.pop()
            k -= 1

        if k == 0:
            stack += number[i:]
            break

        stack.append(num)

    stack = stack[:-k] if k > 0 else stack
    return "".join(stack)

 

728x90
λ°˜μ‘ν˜•
λŒ“κΈ€
κΈ€ 보관함
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€