Programmers_Summer/Winter Coding(~2018) - 소수 만들기
프로그래머스 - 소수만들기 문제 입니다.
1. 문제
https://programmers.co.kr/learn/courses/30/lessons/12977
2. 분류 및 난이도
Programmers 문제입니다.
Level 1난이도의 문제입니다.
3. 생각한 것들(문제 접근 방법)
- 주어진 벡터에서 요소를 3개 뽑아 소수를 만들 수 있는지 확인합니다.
- 1000이하의 자연수가 50 최대 50번 나올 수 있으므로(중복 없다고 했지만 그냥 넉넉하게) 1000 * 50의 사이즈를 가진 벡터를 만들었습니다.
- 에라토스테네스의 체를 이용하였습니다.
4. 접근 방법을 적용한 코드
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
#include <vector>
#include <iostream>
#include <cmath>
using namespace std;
int solution(vector<int> nums) {
int answer = 0;
//소수 벡터
const int size = 50000;
vector<int> sosu(size,0);
for(int i = 2; i < size ; ++i)
sosu[i] = i;
for(int i = 2 ; i<=sqrt(size);++i){
if(sosu[i]==0) continue;
for(int j = 2*i; j<=size;j+=i){
sosu[j] = 0;
}
}
for(int i = 0;i<nums.size()-2;++i){
for(int j = i+1; j <nums.size()-1;++j){
for(int k = j+1; k <nums.size();++k)
if(sosu[nums[i] + nums[j] + nums[k]] !=0)
++answer;
}
}
return answer;
}
5. 결과
필요시.
This post is licensed under CC BY 4.0 by the author.