코딩테스트

[JAVA] 정수 받아 작은값부터 출력하기 (순열)

dackyy 2022. 7. 11. 22:16
반응형
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Permutation {
	static ArrayList<Integer> list = new ArrayList<Integer>();
	static ArrayList<Integer> num = new ArrayList<Integer>();

    public static void main(String[] args) {
    	Scanner sc = new Scanner(System.in);
		System.out.print("어떤 수를 변환하시겠습니까? :");
		findSmall(sc.nextInt());
		Integer[] arr = num.toArray(new Integer[0]);
		
        perm(arr, 0, arr.length, arr.length);

        Collections.sort(list);
        System.out.println(list);
    }

    public static void perm(Integer[] arr, int depth, int n, int r) {
        if (depth == r) {
        	String temp = new String();
            if(arr[0] == 0)
            	return;
            	for (int i:arr)
            		temp += i;
            	
            if (!list.contains(Integer.parseInt(temp))) {
            	list.add(Integer.parseInt(temp));
            }

            return;
        }

        for (int i = depth; i < n; i++) {
            swap(arr, i, depth);
            perm(arr, depth + 1, n, r);
            swap(arr, i, depth);
        }
    }

    private static void swap(Integer[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
	static void findSmall(int val){
		while(val>0) {
			num.add(val%10);
			val /= 10;
		}
	}
}
반응형