[JAVA/1038번] 감소하는 수

고지훈·2021년 10월 27일
1

Algorithm

목록 보기
45/68
post-thumbnail

문제


입력 및 출력


풀이

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

class Main {  
  public static void main(String args[]) throws Exception { 
	  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

	  // N을 입력받는다.
	  int N = Integer.parseInt(br.readLine());

	  // String타입의 리스트 선언
	  List<String> list = new ArrayList<>();

	  for(int i = 0; i < 1000000; i++) {
		  if(String.valueOf(i).length() == 1){
			  list.add(String.valueOf(i));
		  }else{
			  String temp = String.valueOf(i);
			  for(int j = 0; j < temp.length(); j++) {
				  if(j != 0 && temp.charAt(j-1) > temp.charAt(j)){
					  list.add(temp);
				  }
			  }
		  }
	  }
	  System.out.println(list.get(N));
  } 
}
import java.io.*;
import java.util.*;

class Main {
    public static List < Long > list = new ArrayList < > ();
    public static void main(String args[]) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // N을 입력받는다.
        int N = Integer.parseInt(br.readLine());

        // 10이하 인 경우 출력
        if (N <= 10) {
            System.out.println(N);
        }
        // N이 1022보다 큰 경우 -1 출력 => 최대로 나올 수 있는 결과 값을 초과함
        else if (N > 1022) {
            System.out.println(-1);
        } else {
            // 최대로 나타탤 수 있는 자리수는 10자리이기 때문
            for (int i = 0; i < 10; i++) {
                bruteforce(i, 1);
            }
            // 순서대로 정렬
            Collections.sort(list);
            System.out.println(list.get(N));
        }
    }

    public static void bruteforce(long number, int index) {
        // 최대로 나타낼 수 있는 자리의 수가 10자리 이므로, 10 이상일 경우 리턴
        if (index > 10) {
            return;
        }
        // 숫자를 리스트에 추가
        list.add(number);

        for (int i = 0; i < number % 10; i++) {
            bruteforce((number * 10) + i, index + 1);
        }
    }
}

결과 및 해결방법

[결과]

[정리]

해결방법
0
1
10
2
20
21
210
3
30
31
310
32
320
321
3210

profile
"계획에 따르기보다 변화에 대응하기를"

0개의 댓글