n개의 원소로 만들 수 있는 순열의 총 개수 구하기.

안또니오·2022년 4월 24일
0

프로그래머스에서 문제를 풀던 중 이런 문제가 있었다.

여러개의 정수로 이루어진 문자열을 받아,
각 정수를 합쳐 만들 수 있는 정수를 이용하여
그 중에 소수의 개수를 세어내는 문제를 풀었어야 했는데,

위의 문제 : 소수 찾기

일단 받은 정수들로 만들 수 있는 순열을 찾아야지 문제를 풀 수 있을 것 같았다.
그래서 일단 만들 수 있는 총 순열의 개수를 구하는 코드를 짜는데도 생각보다 오래 걸렸다.

일단 순열의 총 개수를 구하는 공식은 다음과 같다,
n개의 숫자를 받아 총 r개의 숫자로 순열을 만든다면 일반적으로 nPr 이런 식으로 쓴다.
그 때, 총 경우의 수는 n n-1 n-2 ... (n-r+1) 개가 된다.
여기서 r을 for문으로 계산하고
그렇다면 나는 nP1 부터 nPn 까지 만들어야 계산해야하기 때문에
1부터 n까지도 계산이 필요했다.
n이 3이라면 3P1, 3P2, 3P3을 만들었고

그 코드는 다음과 같다.

for(int i = chars.length ; i >0 ; i--)
        {
            int p = 1;
            for(int j = chars.length ; j>=i; j--){
                p *= j;
                System.out.println("j : "+j);
            }
            sum+=p;
        }

n은 입력받은 문자열의 길이, 즉 원소의 총 개수가 된다.
그리고 r은 n에서부터 하나하나 줄여가는데,
그때 순열의 총 개수는 n부터 n-r+1 까지 곱해져야 한다.
j를 n에서 줄어가며 곱해지는 수로 계산했고,
i는 r의 값으로 정의했다.

그 계산 과정은 아래 사진과 같다.

막상 구해놓고 나니, 개수보단... 순열 자체를 구하는 게 더 중요한 것 같은데...

profile
2020. 11월 공부시작.

0개의 댓글