본문 바로가기

Archived(CSE Programming)/알고리즘(Java)

프로그래머스 큰 수 만들기

문제 : https://programmers.co.kr/learn/courses/30/lessons/42883?language=java

 

코딩테스트 연습 - 큰 수 만들기 | 프로그래머스

 

programmers.co.kr

해당 문제는 Java의 StringBuilder를 활용하여 풀 수 있었다.

가장 중요한 로직은 각 탐색 범위를 지정하는 것이다.

 

탐색 범위의 시작은 0(...전체길이 - k) 부터 시작한다.

그리고 실제 탐색은 이전에 선택한 idx 보다 큰 숫자부터 가능하다(고른 숫자의 오른쪽부터 고를 수 있으므로).

그래서 idx+1 ~ i+k 를 통해서 각 문자의 범위를 지정할 수 있고 

이중 for문을 통해 이를 처리하여 구현할 수 있다.

 

class Solution {
    public String solution(String number, int k) {
        StringBuilder answer = new StringBuilder();
        int idx = -1; // 가장 최근 고른 idx
        char mch = '0';
        
        // 차례로 탐색
        for(int i=0; i < number.length()-k ; i++){
            mch = '0';
            // 범위 내에서 가장 큰 숫자
            for(int j=idx+1; j<= i+k; j++){
                // 더 큰 숫자 있으면
                if(mch < number.charAt(j)){
                    mch = number.charAt(j);
                    idx = j;
                }
            }
            // 추가
            answer.append(mch);
        }   
        return answer.toString();
    }
}