본문 바로가기
코딩테스트 준비(kotlin)/그리디 알고리즘

[kotlin 프로그래머스] 큰 수 만들기 (level 2)

by 1chanhue1 2025. 1. 8.

import java.util.Stack

class Solution{
    fun solution(number: String, k: Int): String {
        var answer = ""


        var stack = Stack<Char>()

        var removeCount = k

        for (digit in number) {
            while (stack.isNotEmpty() && stack.last() < digit && removeCount > 0) {
                stack.removeAt(stack.size - 1) // 스택의 마지막 숫자 제거
                removeCount--
            }
            stack.add(digit) // 현재 숫자를 스택에 추가
        }

        // 아직 제거할 숫자가 남았다면, 뒤에서부터 제거
        return stack.subList(0, stack.size - removeCount).joinToString("")
    }
}

 

문제 해결 POINT

  1. 숫자를 하나씩 순회하면서 스택에 추가.
  2. 스택의 가장 위 숫자가 현재 숫자보다 작으면, 스택에서 제거. 이 작업은 최대 k번 반복됨.
  3. k개의 숫자를 제거한 후 남은 숫자를 스택에 그대로 추가.
  4. 최종 결과로 스택에 남은 숫자를 이어 붙여 반환함. 만약 아직 k만큼 제거하지 않았다면, 뒤에서부터 제거함.

 

숫자 1924의 시뮬레이션 결과 

단계 현재 숫자 스택 상태 제거된 숫자 남은 제거 횟수
1 1 [1] 없음 2
2 9 [9] 1 제거 1
3 2 [9, 2] 없음 1
4 4 [9, 4] 2 제거 0