중복처리 수정 필요
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.HashSet;
import java.util.Scanner;
public class Q1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("4자리 정수를 입력하세요: ");
int num = sc.nextInt();
if(num>=1000 && num<=9999) {
smallestValue(num);
} else {
System.out.println("1000~9999사이의 정수를 입력하세요.");
}
}
public static void smallestValue(int num) {
ArrayList<Integer> arr = new ArrayList<>();
List<Integer> result = new ArrayList<>();
//1. 각 자리수 구하기
while (num > 0) {
arr.add(num % 10);
num /= 10;
}
//2. 정렬하기
Collections.sort(arr);
//3.순열 출력
reculsion(arr, result, arr.size(), 4);
//4. 정렬한 arr에서 0의 위치를 변경해주기
for(int i = 0; i < arr.size(); i++) {
if (arr.get(i) == 0) {
continue;
} else if (arr.get(i) != 0) {
arr.add(0, arr.get(i));
arr.remove(i + 1);
break;
}
}
//출력
System.out.println("\n---가장 작은 숫자---");
for (Integer i : arr) {
System.out.print(i);
}
}
// 순열
private static void reculsion(ArrayList<Integer> arr, List<Integer> result, int n, int r) {
String str = "";
HashSet<Integer> a = new HashSet<>();
if (r == 0) {
for (Integer item : result) {
str += item;
if(str.length()>=4 && str.charAt(0)!='0') {
a.add(Integer.valueOf(str));
}
}
for(Integer i : a) {
System.out.print(i);
}
System.out.println(a);
return;
}
for (int i = 0; i < n; i++) {
result.add(arr.remove(i));
reculsion(arr, result, n - 1, r - 1);
arr.add(i, result.remove(result.size() - 1));
}
}
}
'Java > 코딩테스트 연습 & 실습' 카테고리의 다른 글
[Java] 이진검색 재귀함수로 구현하기 (0) | 2022.07.13 |
---|---|
[Java] (실습) Baby-gin (1) | 2022.07.11 |
[Java] (실습) 자바 정돈된 수 (0) | 2022.07.11 |
[Java] (실습) 자바 로또 프로그램 (0) | 2022.07.11 |
[Java] 별 찍기 예제 (중첩 for문) (1) | 2022.06.22 |