-
프로그래머스 - 소수 만들기 [자바]Algorithms/- 프로그래머스 2022. 1. 30. 22:40
- 문제 링크 : 소수 만들기
코딩테스트 연습 - 소수 만들기
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때
programmers.co.kr
정답
import java.util.*; import java.lang.*; class Solution { public int solution(int[] nums) { int count = 0; //3개의 수를 더했을 때 소수가 되는 경우의 수 //3개를 골라 소수가 되는 경우의 수 int length = nums.length; int number = 0; for(int i=0; i<length; i++){ for(int j=i+1; j<length; j++){ for(int k=j+1; k<length; k++){ number = nums[i] + nums[j] + nums[k]; if(prime(number)){ count++; } } } } return count; } private boolean prime(int number){//소수인지 판단하는 함수 if(number <= 1){ return false; } double numberSqrt = Math.sqrt((double)number); int numberSqrtRound = (int) Math.round(numberSqrt); Integer[] divisorArr = divisor(number); for(int divisor : divisorArr){ if(divisor != 1){ for(int i=2; i <= numberSqrtRound; i++){ if(divisor == i){ //약수가 있는 경우 return false; } } } } return true; } private Integer[] divisor(int number){ List<Integer> divisorList = new ArrayList<>(); for(int i = 1; i<=number; i++){ if(number % i == 0){ divisorList.add(i); } } return divisorList.stream().toArray(Integer[]::new); } }
분석
- 소수 판단을 조금 더 간편하게 하는 풀이가 있음
import java.util.Arrays; class Solution { public int solution(int[] nums) { int ans = 0; for(int i = 0; i < nums.length - 2; i ++){ for(int j = i + 1; j < nums.length - 1; j ++){ for(int k = j + 1; k < nums.length; k ++ ){ if(isPrime(nums[i] + nums[j] + nums[k])){ ans += 1; } } } } return ans; } public Boolean isPrime(int num){ int cnt = 0; for(int i = 1; i <= (int)Math.sqrt(num); i ++){ if(num % i == 0) { cnt += 1; } } return cnt == 1; } }
반응형