[코테]/[Programmers Lv2]
[Programmers] Lv2_큰 수 만들기 (JAVA/미완)
Sky_
2022. 1. 3. 23:36
💻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에 맞추어 너무 단순하게 생각했나보다.. |