소수찾기 LEVEL2

형동킴·2022년 6월 24일
0

문제링크

내 풀이

완전 탐색

  • permutation을 어떻게 활용한 것인지가 핵심인 문제

나의 풀이

for문으로 접근했다가 코드가 많이 지저분해질 것 같아 재귀로 구현하기로 했다.

  1. 0을 제외한 모든 숫자에 대해 돌면서 숫자와 해당 숫자를 제외한 배열을 재귀함수에 넘겨준다.

    • 0을 제외한 이유는 중복을 방지하기 위함이다.
  2. 재귀함수에서는
    1) 넘겨받은 숫자에 대해 소수인지 판별한다. 소수일 경우, 만약 이미 소수인지 판별한 숫자일 경우 넘어가고, 아닐 경우 소수를 저장하는 배열에 값을 추가하고 소수 개수를 구하는 변수에 1을 더해준다.

    2) 만약 넘겨받은 숫자의 길이가 주어진 숫자들의 개수와 같아졌으면 return으로 재귀함수를 종료한다.

    3) 파라미터로 받은 배열의 각 원소를 돌면서, 배열의 각 원소를 고른 숫자와 합쳐 새로운 숫자를 만들고 새로운 숫자와, 더해준 원소를 제외한 배열을 함께 재귀함수를 호출한다.

순열을 활용한 풀이

  • 코드의 전체 구조
    코드의 전체 구조
  • 재귀함수의 동작
    재귀 함수 동작

순열 활용한 코드

순열을 활용해서 코드를 작성하면 주어진 숫자에 대해 가능한 모든 숫자 조합을 구한다음 소수를 판별할 수 있다.

하지만 해당 방식으로 풀면 0이 주어졌을 때 중복된 숫자가 만들어지기 때문에, 이를 방지하고자 위와 같이 풀게 되었다.

ex) 071과 71

느낀점

  • 문제에서 최대 7개 숫자가 주어지기 때문에 사실 순열을 활용해도 큰 차이가 없었다..ㅎㅎ

  • 또, solution함수안에 재귀함수를 선언했는데, 메인 함수와 재귀함수가 분리가 안되게 만들어서 오류 해결하는데 힘들었다..

  • 순열을 활용했다면 각각 분리해서 각 함수별로 독립적인 기능을 할 수 있게 만들수 있었을 것이고 더 좋은 코드를 짤 수 있었을 것이다.

메인 함수, 순열 결과를 return하는 재귀함수, 소수판별 함수

  • 앞으로 코드를 짤 때는 기능을 확실히 분리할 수 있도록 계획한 후 코드를 짤 수 있도록 해야겠다.
profile
결과보다 성장을!

0개의 댓글