알고리즘 & 자료구조/문제 풀이

[프로그래머스 알고리즘 고득점 Kit][그리디][Java] 큰 수 만들기

수수다 2026. 8. 10. 15:48

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

큰 수는 앞자리 숫자가 클수록 유리하므로 StringBuilder를 스택처럼 사용한다.

숫자를 왼쪽부터 확인
→ 현재 숫자가 저장된 마지막 숫자보다 크면 마지막 숫자 삭제
→ 삭제 횟수가 k가 되거나 더 이상 작은 숫자가 없을 때까지 반복
→ 현재 숫자 추가

 

 
다음 숫자가 더 클 때만 삭제하므로

오름차순인 경우는 삭제 횟수가 남을 수 있음 

그래서 모든 숫자를 순회하고도 삭제 횟수가 남았다면 뒤에서부터 삭제를 해야함
 
 
 

각 숫자는 한 번 추가되고 최대 한 번 삭제됨 : 시간 복잡도: O(N)

 
class Solution {
    public String solution(String number, int k) {
        StringBuilder sb = new StringBuilder();
        
        char first = number.charAt(0);
        sb.append(first);
        int count = 0;
        
        for(int i=1; i<number.length(); i++) {
            while(count < k && sb.length() > 0 && sb.charAt(sb.length() - 1) < number.charAt(i)) {
                sb.deleteCharAt(sb.length() - 1);
                count++;
            }
            
            sb.append(number.charAt(i));
        }
        
        for(int i=count; i<k; i++) {
            sb.deleteCharAt(sb.length() - 1);
        }
        
        return sb.toString();
    }
}