[프로그래머스 Lv.2] 큰 수 만들기

너구리로소이다·2023년 4월 27일
0

programmers-java-lv2

목록 보기
50/55
post-thumbnail

코딩테스트 연습 - 큰 수 만들기

문제 설명

어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다.

예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다.

문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요.

제한사항

  • number는 2자리 이상, 1,000,000자리 이하인 숫자입니다.
  • k는 1 이상 number의 자릿수 미만인 자연수입니다.

풀이

To-Do 리스트

  1. stack이 비어있는 경우, 수를 넣어준다.
  2. stack의 마지막 값보다 넣으려는 수가 크고, 제거하려는 수 k 가 0보다 큰 경우에 아래를 반복한다.
    2-1. 기존 stack값을 제거한다. 이때 제거하려는 수 k도 1을 감소한다.
    2-2. 만약 그전에 stack이 비어버리거나 k가 0보다 작거나 같아지는 경우 반복을 멈춘다.
  3. 넣으려는 수를 stack에 저장한다.
  4. stack의 크기와 최종적으로 구할 수 있는 수의 길이가 같다면 반복을 멈춘다.

결과

import java.util.*;
class Solution {
    public String solution(String number, int k) {
        String answer = "";
        Stack<Integer> stack = new Stack<>();
        char[] crr = number.toCharArray();
        for(int i = 0; i < crr.length; i++){
            char c = crr[i];
            int num = Integer.parseInt(String.valueOf(c));
            if(stack.isEmpty()){
                stack.add(num);
                continue;
            }
            
            while(stack.peek() < num && k > 0){
                stack.pop();
                k--;
                if(stack.isEmpty() || k <= 0) break;
            }
            stack.add(num);
            if(stack.size() == number.length()-k) break;
        }
        
        for(int i : stack){
            answer += i;
        }
        return answer;
    }
}
profile
일단 해보자 뭐든 되겠지 😄

0개의 댓글