ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 <소수 만들기> C++ 풀이
    알고리즘/Programmers 2022. 12. 21. 18:34

    문제 설명
    주어진 숫자 중 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

     

    풀이

    이 문제에서는 간단하게 소수 구하는 방법만 알면 쉽게 풀어나갈 수 있습니다.

    특정한 수가 소수인지 확인하는 함수를 만들고, 3개의 숫자를 조합할 수 있는 로직을 짜면 되는데요.

     

    사실상, 참조 테이블을 만들지 않고 해결하기 위해서는 3중 for문을 사용해서, O(N^3) 방식을 선택해야합니다.

    반복문 사용 시, 다음과 같은 데이터를 출력할 수 있게 해야합니다.

    [1,2,3,4] 가 입력 파라미터 인 경우,

    경우의 수 총합
    1,2,3 6
    1,2,4 7
    1,3,4 8
    2,3,4 9

    총 4개의 경우의 수를 찾을 수 있도록 로직을 짜야합니다.

    i = 0 부터 시작, j = i + 1 부터 시작, k = j + 1 부터 시작하게하여, 중복한 경우의 수가 나타나지 않게 하고,

    구한 경우의수를 각각 더하여 총합에 대하여 isPrimeNumber 함수를 동작시키고, 만약 소수인 경우 값을 하나씩 + 카운팅 하여 해당 결과를 반환해주면 해당 문제는 풀리게 됩니다.

    #include <vector>
    #include <iostream>
    using namespace std;
    
    static inline bool isPrimeNumber(int num) {
        if (num == 1) return false;
    
        int i;
        for (i = 2; i < num; ++i) 
        {
            if (num % i == 0) {
    
                return false;
            }
        }
    
        return true;
    }
    
    int solution(vector<int> nums) {
        int answer = 0;
    
        for (int i = 0; i < nums.size(); ++i) {
            for (int j = i + 1; j < nums.size(); ++j) {
                for (int k = j+1; k < nums.size(); ++k) {
                    //printf("%d %d %d = %d \n", nums[i], nums[j], nums[k], nums[i] + nums[j] + nums[k]);
                    if (isPrimeNumber(nums[i] + nums[j] + nums[k])) {
                        answer++;
                    }
                }
            }
        }
       
    
        return answer;
    }

     


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

     

    프로그래머스

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

    programmers.co.kr

     

    '알고리즘 > Programmers' 카테고리의 다른 글

    프로그래머스 <귤 고르기> C++ 풀이  (0) 2022.12.20

    댓글

Designed by Tistory.