프로그래머스 - 큰 수 만들기

이형석·2024년 6월 17일

알고리즘 Phase1

목록 보기
49/59

문제 풀이를 설명하기가 까다로워서 주석을 참고

class Solution {
    public String solution(String number, int k) {
        StringBuilder sb = new StringBuilder();
        //문제
        //k개를 제거하여, 만들 수있는 수중, 가장 큰 숫자
        //조합이 아니라, 앞에서부터 순서대로 골라야함
        //풀이
        //만들어야 할 수에서, 앞자리 숫자부터 순서대로 n개를 뽑음(반복)
        //시작Index ~ 마지막Index 중 최댓값을 뽑아서, String에 ++
        //코드
        //뽑을숫자 길이
        int n = number.length() - k;
        //가장 처음 시작Index
        int start = 0;
        for(int i = 0; i < n; i++){
            //마지막Index 초기화
            //ex) 1924에서 2자리 수를 뽑는 경우
            //첫번째 자리수는 1,9,2 (startIndex ~ k+i(0) 번째) 중에서 선택해야 함
            //두번째 자리수는 1,9,2,4 (startIndex ~ k+i(1) 번째) 중에서 선택해야 함
            int end = k+i;
            int max = 0;
            //number의 시작Index ~ 마지막Index 중에서 최댓값 찾기
            for(int j = start; j <= end; j++){
                int nowN = number.charAt(j)-'0';
                //더 큰 수를 찾을 때 마다
                if(nowN > max){
                    //최댓값 갱신
                    max = nowN;
                    //다음 탐색 시의 시작Index를, 현재 숫자의 다음 위치로 초기화
                    //(뒤에 올 숫자는 현재 뽑은 숫자의 다음 index부터 뽑아야하므로)
                    start = j+1;
                }
            }
            //탐색 완료 후 나온 최댓값을 현재 자리 숫자로 채택
            sb.append(max);
        }
        return sb.toString();
    }
}
profile
금융IT 개발자

0개의 댓글