youngik

완전탐색 (소수 찾기) 본문

programmers

완전탐색 (소수 찾기)

youngik 2021. 4. 18. 02:15

이 문제는 처음에 소수를 판별하는 부분까지 구현을 했다가, 소수의 조합을 어떻게 만들어야 할까?

그 부분을 구현하지 못해서 애를 먹었던 부분이었다. (해답은 재귀함수에 있었다.)

 

위 문제를 분석해보았을 때, 단순하다

1. 각 숫자별로 조합을 해서, 그 수가 소수이면 count를 하면 된다.

2. 중복값은 1개로 계산하고 앞에 0이 붙은 수는 없다고 생각하면 된다.

 

우리가 수학시간에 자주 배웠던 nCr => n개의 숫자 중에서 r개를 뽑는 연산 재귀함수로 구현했을 때에는

int recursion(int[] arr,  int[] result, int n, int r){

if(r==0){

 return;

}

else{

for(int i=0; i<arr.length; i++){

  result.add(arr.remove(i));   // 값을 저장할 result에 저장하고

  recursion(arr, result, n-1, r-1);   // n개중 1개를 뽑으면 (n-1중에서 r-1를 뽑으면 된다.)

  arr.add(i, result.remove(result.size()-1)); // 각 숫자를 빼온 자리에다가 다시 숫자를 집어놓고 i+1번째 진행

}

}

}

 

이렇게 list에 값을 넣어봤을때, string형태는 011을 11로 저장하지 않아 int형으로 받아야 했고

중복값을 가지기 때문에, 중복값을 가지지않는 hashset에 저장하고 hashset.size()를 출력했다.

 

'programmers' 카테고리의 다른 글

힙 (이중우선순위큐)  (0) 2021.04.18
정렬 (가장 큰 수)  (0) 2021.04.17
해시 (베스트앨범)  (0) 2021.04.17
힙 (더 맵게)  (0) 2021.04.12
해시 (위장)  (0) 2021.04.10
Comments