- Published on
Permutation and Swap
- Authors
- Name
- Easyoon
[#Team Study] Permutation and Swap
순열과 Swap()
재귀 함수 (CODE 01 참고)
자신을 참조하는 함수
읽기 쉽지만, 함수를 중복 호출하기 때문에 효율이 떨어진다.
반복문보다 읽고 쓰기 편하다.
가장 중요한 건 ** 재귀를 빠져나가는 조건
참조타입 & 원시타입 (CODE 02 , 03 참고)
원시타입은 call by value로, 값을 참조하고자 하면 변수 내 값 자체를 던지진다. 즉, 변수를 전달 했을 때, 선언 한 변수 자체의 할당 값을 변경할 수는 없다.
string, number, bigint, boolean, undefined, symbol
Array는 참조형으로, 값을 참조하기 위해서는 해당 주소값을 찾아간다. 변수로 참조형을 전달하면, 선언 한 변수의 주소값을 찾아가 변경하기 때문에 변경 가능.
swap()을 계속 반복하다보니, heap 초과 에러가 떴는데 도큐먼트 처럼 주소와 값을 메모리에 저장하기 때문인가 보다.
이제 본격적으로 들어가면,
순열
[a, b, c] 를 나타낼 수 있는 경우의 수
좀 더 코드 식으로 설명하면,
길이가 n인 배열에서 새로운 배열을 만들었을 때, 가능한 모든 배열의 합
아마 수업 시간 공식은 n!이었던 것 같은데, 새삼 까마득;
조합
..은 이번 범위 외 지만서도.. 순열에서 뽑는 경우의수 r이 추가 nCr 로 표현하고, n! /r 이었던 것 같다.
순열 구현 (CODE 04 참고)
depth : 재귀가 도는 횟수
target : 배열에서 나오는 모든 경우의 갯수 (참고: 보통 알고리즘에서는, 전체의 조합을 찾은 후 특정 경우를 필터링)
재귀가 빠져 나오는 조건(return condition) : depth === target
swap()
params
- array
- res
- target
- deep
getPermutationList()
initialize
🌟 성준님 깃 참고 🌟