순열이란 순서대로 나열이다. 보통은 중복을 허용하지 않는다.
중복을 허용한 경우는 중복 순열이라고 한다.
기본적으로 경우의 수는 직관적으로 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까지 곱하는 것이다.
[Java]연습문제5 - 로마숫자 정수로 변환 (0) | 2023.01.08 |
---|---|
[Java] 연습문제5 - 배열 내 가장 넓은 면적 구하기 (0) | 2023.01.08 |
[Java] 연습문제4 - 여러가지 별 찍기 (0) | 2023.01.08 |
[Java] 연습문제3 - Replace 없이 특정 문자열 원하는 문자로 바꾸기 (1) | 2023.01.07 |
[Java] 연습문제2 - ASCII코드 대소문자 상호 변환 (1) | 2023.01.07 |
댓글 영역