알고리즘 자료구조/프로그래머스
[프로그래머스] Lv.1 소수 만들기
yes_truly
2024. 2. 15. 00:46
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/12977
🖊️문제
문제 설명
주어진 숫자 중 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 |
🖊️문제 풀이
삼중 반복문으로 배열에 있는 값을 하나씩 총 세개 더해준 값이 소수인지 판별해줬다.
소수 판별하는 부분은 따로 함수를 작성해서 판별해줬다.
🖊️코드
public int solution(int[] nums) {
if (nums.length > 50 || nums.length <2){
return 0;
}
int answer = 0;
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];
if(check(num)){
answer++;
}
}
}
}
return answer;
}
private boolean check(int num) {
for (int i = 2; i < num/2; i++) {
if(num % i==0){
return false;
}
}
return true;
}
실행했을 때 효율성이 엄청나게 떨어지는 결과가 나오지는 않았지만 삼중 반복문이라서 효율성이 좀 떨어지는 풀이라 아쉽다..
삼중 반복문을 사용하지 않고 조합을 이용해 푸는 방법에 대해 고민해봐야할 것 같다.
728x90