본문 바로가기
프로그래머스

[프로그래머스]서머코딩/윈터코딩(~2018) - 소수 만들기, C++

by 황인태(intaehwang) 2020. 1. 6.
반응형

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

 

코딩테스트 연습 - 소수 만들기 | 프로그래머스

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

programmers.co.kr

 본 문제는 서머 코딩/원터 코딩(~2018) 문제다. 소수 만들기라는 문제인데 주어진 숫자 중 3개의 수를 더해 소수를 만드는 문제다. 재귀 함수를 이용하여 문제를 해결하였다. 프로그래머스 LEVEL 2 문제 중 재귀 함수를 이용하면 쉽게 풀리는 문제가 많다. 몇 번 연습하다 보면 재귀 함수를 이용하는 문제를 쉽게 해결할 수 있다.

  1. 해당 숫자를 선택할지 말지 결정
  2. 3개의 숫자를 선택 완료
  3. 소수 여부 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <vector>
#include <iostream>
#include <algorithm>
 
using namespace std;
 
int answer = 0;
 
bool chk(int n) {
    if (n < 2return false;
    for (int i = 2; i*<= n; i++) {
        if (n%i == 0return false;
    }
    return true;
}
 
void dfs(vector<int> &nums, int index, int cnt, int sum) {
    // 숫자 3개 선택했을 때, 소수 확인
    if (cnt == 3) {
        if (chk(sum)) {
            answer += 1;
        }
        return;
    }
    if (nums.size() == index) return;
    // 숫자 선택 여부
    dfs(nums, index+1, cnt+1, sum + nums[index]);
    dfs(nums, index+1, cnt, sum);
}
 
int solution(vector<int> nums) {
    sort(nums.begin(), nums.end());
    dfs(nums, 000);
    return answer;
}
cs
반응형
Buy me a coffeeBuy me a coffee

댓글