일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 인플레이션에서 살아남기
- 달빛클럽
- Stack
- Java
- programmers
- BOJ
- 알고리즘
- 달빛캠퍼스
- SWEA
- HashMap
- 재귀
- 노마드코더
- SoftwareExpertAcademy
- JPA
- ReactJS로 영화 웹 서비스 만들기
- 프로그래머스
- React.js
- 노마드코더 강의
- Algorithm
- 카카오블라인드코딩테스트
- React
- 달빛클럽 1기
- 완전탐색
- Array
- 리액트
- 백준
- 달빛클럽1기
- dfs
- 자바
- 경제공부
- Today
- Total
th42500의 TIL
순열 (Permutation) 본문
순열 (Permutation)
순열(Permutation) ?
👉 서로 다른 n개의 원소 중 r개를 순서대로 골라내어 한줄로 나열하는 것
순열의 수식
nPr = n개의 원소 중에 r개를 선택하여 일렬로 나열했다는 의미
nPn = 팩토리얼(Factorial)이라 불리며, n부터 1까지의 모든 수를 곱한 값
위의 식을 보면 반복되는 공식이 존재하므로, 순열은 재귀함수를 적용하여 나타낼 수 있음
재귀함수를 모른다면 밑의 링크를 참고해보자.
재귀함수 👉 https://ichijeochi.tistory.com/11
재귀 (Recursive)
재귀 함수(Recursive Function) 함수 내에서 직접 혹은 간접적으로 자기 자신을 반복적으로 호출하는 함수 기저조건(Basis Part)과 유도파트(Inductive Part)로 구성 - 기저조건(Basis Part) : 재귀 함수 호출..
ichijeochi.tistory.com
N값에 따른 순열 (feat. Factorial)
N | 순열 값 | Million / sec | Billion / sec |
9 | 362880 | ||
10 | 3628800 | ||
11 | 39916800 | seconds | |
12 | 479001600 | minutes | |
13 | 6227020800 | hours | seconds |
: 보통 알고리즘 문제의 답안은 초 단위로 시간제한이 있으므로 N이 11인 팩토리얼까지를 주로 계산하게 될 것
위의 N의 팩토리얼 값을 구할때에는 팩토리얼 계산기를 이용하면 편리
https://ourcalc.com/factorial-calculator/
팩토리얼 계산기
팩토리얼 계산기는 작은 숫자 뿐 아니라 2자리 수 이상의 팩토리얼도 과학적 표기법 뿐 아니라 실제 수치도 계산하여 표시 합니다.
ourcalc.com
순열을 생성하는 방법 (feat. Pseudo-Code)
✔ 재귀호출을 통한 순열 생성
ex) {1, 2, 3}을 포함하는 모든 순열을 생성하는 함수
num[] : 순열 저장 배열 (멤버변수)
select[] : 인덱스에 해당하는 숫자가 사용중인지 저장하는 배열 (num 배열과 같은 크기)
permutation (cnt) // 현재까지 뽑은 순열 수의 개수
if(cnt==3) // 순열 생성 완료
else
for i from 1 to 3 // 가능한 모든 수에 대해 시도
if select[i] == true then continue; // 이미 사용한 수라면 continue;
num[cnt] ← true // 수 사용
select[i] ← true // 사용 표시
permutation(cnt+1) // 다음 인덱스로 넘어가기 (cnt = 지금까지 선택한 수의 개수)
select[i] ← false // 사용하지 않은 수로 다시 되돌려놓기
end for
선택된 숫자가 들어갈 인덱스는 계속 바뀌며, 해당 인덱스를 결정하는 요인은 "앞에서 수를 선택했는가?"
❓ 앞에서 선택된 수인지 어떻게 알 수 있을까?
1️⃣ 멤버변수를 이용하여 기존에 뽑았던 수들을 공유
2️⃣ 매개변수로 기존에 뽑았던 수들을 전달하여 공유
👉 개인적으로 1️⃣의 방법이 코드가 더 간결해져서 주로 멤버변수를 이용
'Algorithm > Concept' 카테고리의 다른 글
배열(Array) (0) | 2021.12.22 |
---|---|
DFS (Depth-First Search) (0) | 2021.12.22 |
그리디 알고리즘 (0) | 2021.12.20 |
순열(Permutation)과 조합(Combination)은 어떻게 구분할까? (0) | 2021.12.16 |
재귀 (Recursive) (0) | 2021.12.15 |