알고리즘 자료구조/프로그래머스

[프로그래머스] Lv.1 소수 만들기

yes_truly 2024. 2. 15. 00:46
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/12977

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🖊️문제

문제 설명

주어진 숫자 중 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