상세 컨텐츠

본문 제목

[Java] 기초수학 - 순열 for문

Java/제로베이스

by Gopythor 2023. 1. 13. 06:29

본문

728x90
반응형

순열이란 순서대로 나열이다. 보통은 중복을 허용하지 않는다.

 

중복을 허용한 경우는 중복 순열이라고 한다.

 

기본적으로 경우의 수는 직관적으로 2번으로 많이 계산한다.

단순히 팩토리얼로 구성하기 쉽기 때문이다. 하지만 1번도 for문으로 구현 가능하다.

https://bhsmath.tistory.com/107 에서 가져온 그림. 순열에 대해 개념 이해가 쉬우므로 참조.

System.out.println("== 순열 ==");
//      5명을 3줄로 세우는 경우의 수
n = 5;
int r = 3;
result = 1;
System.out.println(result = factorial(n)/factorial(n-r));

result = 1;
for (int i = n; i >= n-r+1 ; i--) {
    result *= i;
}

n은 요소의 갯수이고, r은 선택의 갯수이다.

result를 1로 초기화하는 이유는, 곱하기를 해야 하는데, 0이 들어가면 모든 곱은 0이 되기 때문이다.

 

 

기본적으로 생각할 때에는,

(n -0) x (n -1) x (n-2) x · · · x (n - r +1) 까지 곱한다고 생각하면 된다.

 

n부터 시작하여 하나씩 줄여가며 r개씩 배열 하면 되는 것이다.

 

 

n -0은 첫번째이고, r번째는 r+1로 표현해야 표현식이 옳다.

배열의 구조를 생각하면 이해하기 쉬울 것이다.

배열 0부터 시작하지만, 0을 기본적으로 첫번째 배열이라고 부른다.

그래서 for문은 n 부터 n-r+1까지 곱하는 것이다.

 

 

 

728x90
반응형

관련글 더보기

댓글 영역