n개의 무언가 중 일부만을 선택하여 나열하는 것을 순열이라고 합니다. 순열은 순서를 생각하며 나열한다고 생각하면 됩니다. [1,2,3][1,3,2]는 같은 값들의 배열이지만 값들이 순서가 다르기 때문에 다르게 생각해야합니다.
발표 순서를 정하는 함수에서의 로직을 살펴보겠습니다.(모든 문제는 코드스테이츠 기준입니다. 코드배포는 하지 않습니다)
발표하는 사람 수(n)와 모든 발표순서의 경우의 수 중 몇번째의 발표순서를 선택할지 고르기 위해 받는 값(k)을 인자로 받는 함수에서 만약 발표할 사람이 3명 이라면 경우의 수는 [1,2,3],[1,3,2],[2,1,3],[2,3,1]...순서입니다. 첫번째가 발표자가 1번일 경우 두번째 발표자는 2, 3 두명으로 나뉩니다. 해당사항을 잘 생각하면서 로직을 적어보면 재귀함수와 DP를 이용합니다.
이렇게 하면 1을 처음에 넣고 for문을 돌아 두번째 값이 2일때, 3일때 인 경우를 구해 저장할 수 있습니다.
조합은 순열에서 순서에 상관없이 값들을 나열하기 때문에 위에서 말한 [1,2,3][1,3,2]는 같은 배열이 되는 겁니다.
예시로[1,2,3,4]에서 3개의 조합을 구해 값들의 합이 소수 인 경우를 카운트 하라고 하면 나올 수 있는 경우의 수는 [1,2,3], [1,2,4], [1,3,4], [2,3,4] 4가지 입니다. 여기서 각각의 합을 구해 그값이 소수이면 카운트 하는 형식으로 코드를 작성하면 됩니다.