프로그래밍/Algorithm

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

일단개그하다 2022. 11. 18. 00:41

문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

접근 방법 및 풀이

k개를 제거 하여 가장 큰 수를 만들어야 한다면 number 문자열의 0번째에서 k번째 사이의 가장 큰 수의 앞 문자열을 제거

가장 큰 숫자가 여러개 있는 경우에는 index가 가장 0에 가까운 자리의 앞 문자열을 제거

제거한 문자열의 길이 만큼 k에서 차감

k가 0이 될 때까지 진행

public class Q30_42883 {
    public String solution(String number, int k) {
        StringBuilder sb = new StringBuilder();
        while (k > 0) {
            int length = number.length();

            if (length == k) {
                number = "";
                break;
            }

            int maxIndex = this.getMaxIndex(number, k);
            sb.append(number.charAt(maxIndex));
            number = number.substring(maxIndex + 1, length);
            k -= maxIndex;
        }
        sb.append(number);
        return sb.toString();
    }

    /**
     * 0 ~ scopeIndex 사이의 숫자중 가장 큰 숫자의 index를 반환
     */
    public int getMaxIndex(String number, int scopeIndex) {
        char temp = ' ';
        int result = -1;
        for (int i = 0; i <= scopeIndex; i++) {
            char target = number.charAt(i);
            if (temp == ' ' || temp < target) {
                temp = target;
                result = i;
            }
        }
        return result;
    }
}