본문 바로가기
Programmers/C++

[C++] 프로그래머스 :: 소수 만들기

by Sin_ 2021. 9. 26.
728x90

안녕하세요 뚜디 입니다 :)

코딩테스트 연습 - 소수 만들기 | 프로그래머스 (programmers.co.kr)

 

코딩테스트 연습 - 소수 만들기

주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때

programmers.co.kr

< 프로그래머스 - 소수 만들기(Lv1) >


1. 연습 문제

2. 문제 풀기

3. 소스 코드

4. 결과


1. 연습 문제
  • 문제 설명
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
  • 제한 조건
1. nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
2. nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
  • 입출력 예
nums result
[1,2,3,4] 1
[1,2,7,6,4] 4

 

2. 문제 풀이
입출력 예 #1
[1,2,4]를 이용해서 7을 만들 수 있습니다.
입출력 예 #2
[1,2,4]를 이용해서 7을 만들 수 있습니다.[1,4,6]을 이용해서 11을 만들 수 있습니다.[2,4,7]을 이용해서 13을 만들 수 있습니다.[4,6,7]을 이용해서 17을 만들 수 있습니다.

1. 입력받은 nums를 정렬합니다.
2. 정렬된 nums를 반복문을 통해 순차적으로 더하며, temp의 합을 순차적으로 넣습니다.
3. temp를 정렬하고, 반복문을 통해 temp의 인자값중 소수를 찾습니다.
4. flag 를 통해 소수의 갯수를 answer++을 하여 리턴해줍니다.

 

3. 소스 코드
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int solution(vector<int> nums) {
    int answer = 0;
    bool check = false;
    vector<int> temp;

    sort(nums.begin(), nums.end());

    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++) {
                temp.push_back(nums[i] + nums[j] + nums[k]);
            }
        }
    }
    sort(temp.begin(), temp.end());

    for (int i = 0; i < temp.size(); i++) {
        check = false;
        for (int j = 2; j < temp[i]; j++) {
        // 소수가 아니라면 해당 조건문을 통해 걸러냅니다.
            if (temp[i] % j == 0) {
                check = false;
                break;
            }
            check = true;
        }
        check == true ? answer++ : answer;
    }

    return answer;
}

 

4. 결과

728x90