[백준 1038] 감소하는 수(Java)

최민길(Gale)·2023년 12월 3일
2

알고리즘

목록 보기
162/172

문제 링크 : https://www.acmicpc.net/problem/1038

이 문제는 재귀함수를 이용하여 구현할 수 있습니다.

이 문제의 핵심은 감소하는 수를 어떤 식으로 생성하느냐입니다. 이는 감소하는 수의 특성을 이해하면 쉽게 구현할 수 있습니다. 감소하는 수는 이전 자릿수의 수보다 작은 수입니다. 따라서 현재 자릿수의 수보다 작은 수를 그 뒤에 계속 추가하는 방식으로 구현이 가능하며, 재귀함수의 성질을 이용하여 자릿수와 값 정보를 받아 자신의 뒤에 값보다 작은 수를 리스트에 추가하는 방식으로 구현이 가능합니다.

다음은 코드입니다.

import java.util.*;
import java.io.*;

class Main{
    static List<Long> arr = new ArrayList<>();

    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        if(N<=10) System.out.println(N);
        else{
            for(int i=0;i<10;i++) set(i,1);
            if(N >= arr.size()) System.out.println(-1);
            else{
                Collections.sort(arr);
                System.out.println(arr.get(N));
            }
        }
    }

    static void set(long num, int val){
        if(val > 10) return;

        arr.add(num);
        for(int i=0;i<num%10;i++){
            set((num*10)+i, val+1);
        }
    }
}

profile
저는 상황에 맞는 최적의 솔루션을 깊고 정확한 개념의 이해를 통한 다양한 방식으로 해결해오면서 지난 3년 동안 신규 서비스를 20만 회원 서비스로 성장시킨 Software Developer 최민길입니다.

0개의 댓글

관련 채용 정보