문제설명
정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 계속해서 감소하는 수를 감소하는 수라고 할 때 N번째 감소하는 수를 구하는 문제입니다.
작동 순서
1. 구하려하는 감소하는 수의 순서 N을 입력받습니다.
2. 큐에 0부터 9를 집어넣습니다.
3. 큐에서 숫자를 하나씩 꺼내가며 그 숫자의 끝자리보다 작은 숫자를 끝자리에 넣고 그 수를 큐에 삽입합니다.
4. 반복문이 한번 실행될 때마다 count를 +1하고 count가 N이 되면 반복문을 종료하고 해당 순서의 감소하는 수를 출력합니다.
5. 모든 연산을 끝내고도 count가 N보다 작으면 -1을 출력합니다.
소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
public class 백준_1038번_감소하는수 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Queue<Long> q = new LinkedList<>();
int N = Integer.parseInt(br.readLine());
int count = -1;
for(long i=0;i<10;i++){
q.add(i);
}
while(!q.isEmpty()){
long num = q.poll();
count++;
if(count == N) {
System.out.print(num);
break;
}
long finalNum=num%10;
for(int j=0;j<10;j++){
if(finalNum>j) q.add(Long.parseLong(num +Integer.toString(j)));
else break;
}
}
if(count<N) System.out.print(-1);
}
}