728x90
반응형
Programmers LV1. 소수 만들기
문제 설명
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
제한 사항
- nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
- nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
입출력 예
nums | result |
[1,2,3,4] | 1 |
[1,2,7,6,4] | 4 |
사용 언어
Java
해결 방법
- 3개의 숫자를 갖는 모든 경우의 수(순서X)가 필요하므로 3중 for문이 필요하다.
- 소수를 판별법
- 2~N 미만의 자연수로 나누어지는 수가 없으면 소수 (solution)
- 2~루트N 이하의 자연수로 나누어지는 수가 없으면 소수 (solution2)
코드
/*
소수 만들기
*/
public class test_12977 {
public static void main(String[] args) {
int[] arr = {1,2,3,4};
System.out.println(solution(arr));
}
// 1. 2~N 이하 자연수로 나누어지는지 판별
static public int solution(int[] nums) {
int answer = 0;
// 서로 다른 3개의 수 조회
for(int i=0; i<nums.length; i++) {
for(int j=i+1; j<nums.length; j++) {
for(int k=j+1; k<nums.length; k++) {
int num = nums[i]+nums[j]+nums[k];
// 소수 판별
boolean isSosu = true;
for(int a=2; a<num; a++) {
if(num%a == 0) {
isSosu = false;
}
}
if(isSosu) answer++;
}
}
}
return answer;
}
// 2. 2~루트N 사이의 자연수로 나누어지는지 판별
static public int solution2(int[] nums) {
int answer = 0;
// 서로 다른 3개의 수 조회
for(int i=0; i<nums.length; i++) {
for(int j=i+1; j<nums.length; j++) {
for(int k=j+1; k<nums.length; k++) {
int num = nums[i]+nums[j]+nums[k];
// 소수 판별
boolean isSosu = true;
for(int a=2; a<=Math.sqrt(num); a++) {
if(num%a == 0) {
isSosu = false;
}
}
if(isSosu) answer++;
}
}
}
return answer;
}
}
728x90
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘/Programmers] LV1. 문자열 내 마음대로 정렬하기 (0) | 2021.04.24 |
---|---|
[알고리즘/Programmers] LV1. 예산 (0) | 2021.04.24 |
[알고리즘/2021 KAKAO BLIND 채용] 신규 아이디 추천 (0) | 2021.04.23 |
[알고리즘/Programmers] LV1. 같은 숫자는 싫어 (0) | 2021.04.13 |
[알고리즘/Programmers] LV1. 가운데 글자 가져오기 (0) | 2021.04.13 |