1038번: 감소하는 수
음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를
www.acmicpc.net
풀이
재귀함수를 이용해서 해결했습니다.
자세한 사항은 코드의 주석을 참고해주세요!
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main {
public static int N;
public static List<Long> list;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
// 감소하는 수의 가장 큰 수는 9876543210이다
// why?
// 9보다 큰 수는 10인데 이를 붙이면 109876543210이 되어버리고
// 0 -> 9는 감소하는 수가 아니므로 즉, 9보다 큰 수는 앞에 올수가없기때문에
// 10의 길이인 9876543210이 가장 긴 감소하는 수가된다.
// 때문에 9876543210이 나오는 N인 1022보다 큰 수는 -1이 된다.
// 1023을 넣게되면 IndexOutOfBoundsExeption 에러가 발생
if (N > 1022) {
System.out.println(-1);
System.exit(0);
}
list = new ArrayList<Long>();
for (int i = 0; i < 10; ++i) {
// 0 ~ 9로 시작하는 감소하는 수를 구함
calc(i, 1);
}
// list에는 감소하는 수가 순서에 상관없이 저장되어있다.
// 이를 정렬을 시켜 순서대로 정리가 되게해준다.
Collections.sort(list);
System.out.println(list.get(N));
}
public static void calc(long num, int len) {
// 감소하는 수의 가장 큰 수는 9876543210이다
// why?
// 9보다 큰 수는 10인데 이를 붙이면 109876543210이 되어버리고
// 0 -> 9는 감소하는 수가 아니므로 즉, 9보다 큰 수는 앞에 올수가없기때문에
// 10의 길이인 9876543210이 가장 긴 감소하는 수가된다.
if (len > 10) {
return;
}
// 리스트에 계속해서 생성된 감소하는 수인 num을 저장한다.
list.add(num);
for (int i = 0; i < 10; ++i) {
// 숫자의 제일 마지막자리와 비교하여 작은 수를 맨 뒤에 넣는다.
// ex) 98 -> 987, 986, 985, ... , 980 까지 재귀함수가 호출된다.
if (num % 10 > i) {
// 기존 감소하는 수인 num에 * 10을 하여 자리수를 높이고 작은 수를 맨뒤에 넣어줌
// 길이를 +1
calc((num * 10) + i, len + 1);
}
}
}
}
pyo7410/Algorithm
1일 1커밋을 목표로! Contribute to pyo7410/Algorithm development by creating an account on GitHub.
github.com
'알고리즘 > 백준' 카테고리의 다른 글
[Java] BOJ 2668번 숫자고르기 (0) | 2021.07.09 |
---|---|
[Java] BOJ 2981번 검문 (0) | 2021.07.08 |
[Java] BOJ 14226번 이모티콘 (0) | 2021.07.06 |
[Java] BOJ 2470번 두 용액 (0) | 2021.07.05 |
[Java] BOJ 12851번 숨바꼭질 2 (0) | 2021.07.02 |