JAVA :: 소수 문제 풀기

s_omi·2022년 1월 21일
0

JAVA (자바)

목록 보기
37/62
post-thumbnail

📝 소수 문제 풀기

주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.

ex) nums = [1, 2, 3, 4], result = 1 / nums = [1, 2, 7, 6, 4], result = 4

💡 나의 풀이

소수가 아닌 경우를 먼저 처리 후, else if 문을 사용하여 소수인 경우를 그 다음 처리
소수인 경우를 먼저 처리해보니, 소수가 아닌 경우도 같이 처리되어 역으로 소수가 아닌 경우를 먼저 처리하는 것이 낫다고 생각

  • 예시
public int solution(int[] nums) {
   int answer = 0;
   for(int i = 0; i < nums.length - 2; i++) {        
   // i의 최댓값이 어디까지인 지 인지!
      for(int j = i + 1; j < nums.length - 1; j++) { 
      // j의 최댓값이 어디까지인 지 인지!
         for(int k = j + 1; k < nums.length; k++) {
            int temp = nums[i] + nums[j] + nums[k];
            for(int n = temp - 1; n > 0; n--) {
               if(n != 1 && (temp % n) == 0)         
               // 나누는 수가 1이 아닌 데도 나눠지는 경우 => 소수가 아닌 경우 
                  break;
               else if(n == 1)   
               // 나누는 수가 1인 경우 => 소수인 경우                         
                  answer++;   
             }
          }
       }
   }
   return answer;
}

함수를 활용하는 연습이 필요


💡 다른 분의 풀이

제곱근을 구하는 함수인 sqrt() 함수를 사용

  • 예시
public Boolean isPrime(int num){ // num이 위의 temp와 같은 값
   int cnt = 0;
   
   for(int i = 1; i <= (int)Math.sqrt(num); i++){
       if(num % i == 0) cnt += 1; 
   }
   
   return cnt == 1;
}
profile
공부한 거 올려요 :)

0개의 댓글