Post

[JAVA]백준 1038번 감소하는 수

[JAVA]백준 1038번 감소하는 수

📌문제 링크


https://www.acmicpc.net/problem/1038

Image

📌문제 설명


감소하는 수 자체가 많지 않고 최대 큰 값이 9876543210임을 깨닫는것이 중요합니다. 백트래킹으로 가능한 모든 수를 구한 후 정렬을 해줍니다.

📌코드


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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;

public class Main {
    // BufferedReader를 사용하여 입력을 받기 위한 객체
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    // 입력받은 숫자 N
    static int N;
    // 숫자들을 저장할 리스트
    static ArrayList<Long> ls = new ArrayList<>();

    // 입력을 받는 메서드
    public static void input() throws Exception {
        N = Integer.parseInt(br.readLine());
    }

    // 백트래킹을 수행하는 메서드
    public static void backTracking(long num) {
        ls.add(num); // 현재 숫자를 리스트에 추가
        long lastDigit = num % 10; // 마지막 자릿수 계산
        for (long i = 0; i < lastDigit; i++) {
            backTracking(num * 10 + i); // 다음 자릿수를 추가하여 재귀 호출
        }
    }

    // 문제를 해결하는 메서드
    public static void solve() {
        for (long i = 0; i <= 9; i++) {
            backTracking(i); // 0부터 9까지의 숫자로 백트래킹 시작
        }
        Collections.sort(ls); // 리스트를 정렬
        if (ls.size() > N) {
            System.out.println(ls.get(N)); // N번째 숫자 출력
        } else {
            System.out.println(-1); // N번째 숫자가 없으면 -1 출력
        }
    }

    // 메인 메서드
    public static void main(String[] args) throws Exception {
        input(); // 입력 받기
        solve(); // 문제 해결
    }
}
This post is licensed under CC BY 4.0 by the author.