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
'Programmers > C++' 카테고리의 다른 글
[C++] 프로그래머스 :: 음양 더하기 (0) | 2021.10.07 |
---|---|
[C++] 프로그래머스 :: 내적 (0) | 2021.10.07 |
[C++] 프로그래머스 :: 완주하지 못한 선수 (0) | 2021.09.26 |
[C++] 프로그래머스 :: K번째수 (0) | 2021.09.26 |
[C++] 프로그래머스 :: 모의고사 (0) | 2021.09.26 |