알고리즘(algorithm)feat.JAVA - 순열

장선웅·2022년 7월 20일
0

자바(Java)의 알고리즘 중에 순열에 대해 알아보도록 하자.


  1. 팩토리얼(Factorial) -1에서 n까지의 모든 자연수의 곱(n!)
  2. 순열(Permutation) - 서로 다른 n개 중에서 r개를 뽑는 경우의 수(순서O,중복X) => n(n-1)(n-1)...(n-r+1)
  3. 중복 순열 - 서로 다른 n개중 r개를 선택하는 경우의 수(순서O,중복O) => n의 r승
  4. 원 순열 - 원 모양의 테이블에 n개의 원소를 나열하는 경우의 수 => (n-1)!

public class Main {
    public static void main(String[] args) {

		//팩토리얼 = 1에서 n까지의 모든 자연수의 곱(n!)
        System.out.println("== 팩토리얼 ==");
		//5!
        int n = 5;
        int result = 1;
        for (int i = 1; i <= n; i++) {
            result *= i;
        }
        System.out.println("result = " + result);
		
        //IntStream을 이용해 구하기
        System.out.println(IntStream.range(1,6).reduce(1,(x,y) -> (x * y)));


		//순열(Permutation) - 순서를 정해서 나열
        //서로다른 n개 중에서 r개를 선택하는 경우의 수(순서O,중복X)
        //n(n-1)(n-2)...(n-r-1)
        System.out.println("== 순열 ==");
		//5명을 3줄로 세우는 경우의 수
        n = 5;
        int r = 3;
        result = 1;

        for (int i = n; i >= n - r + 1; i--) {
            result *= i;
        }
        System.out.println("result = " + result);




		//중복 순열 - 서로 다른 n개 중에서 r개를 선택하는 경우의 수(순서O, 중복O)
        //n의 r승
        System.out.println("== 중복 순열 ==");
		//서로 다른 4개의 수 중 2개를 뽑는 경우의 수 (중복 허용)
        n = 4;
        r = 2;
        result = 1;

        for (int i = 0; i < r; i++) {
            result *= n;
        }
        System.out.println("result = " + result);
        //Math함수를 이용해 구하기
        System.out.println(Math.pow(n,r));



		//원 순열 - 원 모양의 테이블에 n개의 원소를 나열하는 경우의 수
        //(n-1)!
        System.out.println("== 원 순열 ==");
		//원 모양의 테이블에 3명을 앉히는 경우의 수
        n = 3;
        result = 1;
        for (int i = 1; i < n; i++) {
            result *= i;
        }
        System.out.println("result = " + result);
    }
}
//결과값
== 팩토리얼 ==
result = 120
120
== 순열 ==
result = 60
== 중복 순열 ==
result = 16
16.0
== 원 순열 ==
result = 2

Process finished with exit code 0
profile
개발을 꿈꾸는 초짜

0개의 댓글