티스토리 뷰

💻JAVA 코드 바로보기



문제 설명

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

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

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

 

 

제한사항

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

입출력 예

number k return
"1924" 2 "94"
"1231234" 3 "3234"
"4177252841" 4 "775841"

 

🌼 JAVA 알고리즘


□초기화면

 

 

 

 

 

 

□풀이과정

두가지 방법으로 생각해봤는데, 첫번째는 예시3과 같이 긴 숫자가 나올 경우 저장공간에 필요한 메모리가 매우 커지기 때문에, 두번째 방법으로 진행했다.
class Solution {
    public String solution(String number, int k) {
        String answer = "";
        
        //1-1.두자리를 없앤 모든 경우의 수를 arrayList에 저장한다.
        //1-2.저장공간을 정렬하여 [0]값을 return한다.
        //2-1.number을 split하여 arrayList에 저장한다.
        //2-2.arrayList을 정렬하여 length-2만큼 answer에 저장한다.
        
        
        return answer;
    }
}
import java.util.ArrayList;
import java.util.Collections;

class Solution {
    public String solution(String number, int k) {
        String answer = "";
        
        //2-1.number을 split하여 arrayList에 저장한다.
        //2-2.arrayList을 정렬하여 length-k만큼 answer에 저장한다.
        ArrayList<Integer> numbers = new ArrayList<Integer>();
        for(int i=0;i<number.length();i++){
            numbers.add(Character.getNumericValue(number.charAt(i)));
        }
        //정렬
        Collections.sort(numbers,Collections.reverseOrder());
        for(int i=0;i<numbers.size()-k;i++){
            answer+=numbers.get(i);
        }
        
        
        
        
        
        return answer;
    }
}

어이쿠
테스트케이스1에 맞추어 너무 단순하게 생각했나보다..

 

 

 

 

댓글