permutation
을 어떻게 활용한 것인지가 핵심인 문제for문으로 접근했다가 코드가 많이 지저분해질 것 같아 재귀로 구현하기로 했다.
0을 제외한 모든 숫자에 대해 돌면서 숫자와 해당 숫자를 제외한 배열을 재귀함수에 넘겨준다.
재귀함수에서는
1) 넘겨받은 숫자에 대해 소수인지 판별한다. 소수일 경우, 만약 이미 소수인지 판별한 숫자일 경우 넘어가고, 아닐 경우 소수를 저장하는 배열에 값을 추가하고 소수 개수를 구하는 변수에 1을 더해준다.
2) 만약 넘겨받은 숫자의 길이가 주어진 숫자들의 개수와 같아졌으면 return으로 재귀함수를 종료한다.
3) 파라미터로 받은 배열의 각 원소를 돌면서, 배열의 각 원소를 고른 숫자와 합쳐 새로운 숫자를 만들고 새로운 숫자와, 더해준 원소를 제외한 배열을 함께 재귀함수를 호출한다.
순열을 활용해서 코드를 작성하면 주어진 숫자에 대해 가능한 모든 숫자 조합을 구한다음 소수를 판별할 수 있다.
하지만 해당 방식으로 풀면 0이 주어졌을 때 중복된 숫자가 만들어지기 때문에, 이를 방지하고자 위와 같이 풀게 되었다.
ex) 071과 71
문제에서 최대 7개 숫자가 주어지기 때문에 사실 순열을 활용해도 큰 차이가 없었다..ㅎㅎ
또, solution함수안에 재귀함수를 선언했는데, 메인 함수와 재귀함수가 분리가 안되게 만들어서 오류 해결하는데 힘들었다..
순열을 활용했다면 각각 분리해서 각 함수별로 독립적인 기능을 할 수 있게 만들수 있었을 것이고 더 좋은 코드를 짤 수 있었을 것이다.
메인 함수, 순열 결과를 return하는 재귀함수, 소수판별 함수