반응형
프로그래머스 링크
https://school.programmers.co.kr/learn/courses/30/lessons/12977
문제 설명
주어진 숫자 중 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 |
코드
#include <vector>
using namespace std;
int CheckArray[3000];
bool CheckFunc(int Numb)
{
for (int i = 2; i < Numb / 2; ++i)
{
if (Numb % i == 0)
{
return false;
}
}
return true;
}
int solution(vector<int> nums) {
int answer = 0;
int Size = nums.size();
int Count = 1;
for (int i = 0; i < Size - 2; ++i)
{
for (int j = i + 1; j < Size - 1; ++j)
{
for (int k = j + 1; k < Size; ++k)
{
int AddNumb = nums[i] + nums[j] + nums[k];
// 메모리를 사용하여 시간을 줄임
// 이미 탐색을 한 소수가 아닌 인덱스는 건너뛴다.
if(CheckArray[AddNumb] == -1)
continue;
// 소수 탐색
if (CheckFunc(AddNumb))
{
CheckArray[AddNumb] = 1;
++answer;
}
else
{
CheckArray[AddNumb] = -1;
}
}
}
}
return answer;
}
필자의 경우 메모리를 사용하여 시간을 줄이는 방식을 사용했다.
반응형
'프로그래머스 > lv1' 카테고리의 다른 글
프로그래머스 : 연습문제 > 서울에서 김서방 찾기(lv1) c++ (2) | 2023.05.08 |
---|---|
프로그래머스 : 2021 Dev-Matching: 웹 백엔드 개발자(상반기) > 로또의 최고 순위와 최저 순위(lv1) c++ (0) | 2023.05.06 |
프로그래머스 : 연습문제 >가장 가까운 같은 글자(lv1) c++ (0) | 2023.04.28 |
프로그래머스 : 해시 > 폰켓몬(lv1) c++ (0) | 2023.04.26 |
프로그래머스 : 해시 > 완주하지 못한 선수(lv1) c++ (0) | 2023.04.25 |
댓글