Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

지극히 개인적인 개발블로그

백준 알고리즘 1038: 감소하는 수(Java) 본문

알고리즘

백준 알고리즘 1038: 감소하는 수(Java)

코드분쇄기 2020. 9. 2. 16:26

풀이: 완전 탐색이라고 하지만 1부터 증가하여 찾는다면 제한시간에 걸릴 것이 분명하다.

일정 규칙내에서 재귀함수를 이용하여 풀어줬다

0으로 시작하는 감소수(사실 0 하나)

1로 시작하는 감소수 ex)10

2로 시작하는 감소수 ex)20, 21, 210

 

 

package Baekjoon;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main_1038 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
//        범위 내 최대 감소수는 987654321
        int idx = Integer.parseInt(str);
        if(idx > 1022){
            System.out.println(-1);
            return;
        }
        ArrayList<Integer> list = new ArrayList<>();

        for(int i=0; i<10; i++){
            getDecNum(i, 1, list);
        }

        Collections.sort(list);


        System.out.println(list.get(idx));
    }

    private static ArrayList getDecNum(long num, int temp, ArrayList list){
        if(temp > 10){
            return list;
        }

        list.add(num);

        for(int i=0; i<10; i++){
            if(num%10 > i){
                getDecNum((num*10)+i, temp+1, list);
            }
        }
        return list;
    }
}