[코테]/[Programmers Lv1]
[Programmers] Lv1_소수 구하기 (C/C++)
Sky_
2021. 6. 1. 22:46
□문제 설명
주어진 숫자 중 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 |
□주어진 코드
□완성 코드1
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// nums_len은 배열 nums의 길이입니다.
int solution(int nums[], size_t nums_len) {
int answer = -1;
//int arrSize = (nums_len * (nums_len - 1) * (nums_len - 2)) / ((nums_len - 1) * (nums_len - 2));
//int* addNum = (int*)malloc(sizeof(int) * nums_len);
int addNum = 0;
int count = 0;
int index = 0;
int ifNum=0;
for (int i = 0; i < nums_len; i++) {
for (int j = i + 1; j < nums_len; j++) {
for (int z = j + 1; z < nums_len; z++, index++) {
addNum = nums[i] + nums[j] + nums[z];
printf("%d ", addNum);
for (int index = 2; index < addNum; index++) {
if (addNum % index == 0) {
ifNum=0;
break;
}
else ifNum=1;
}
if (count == 1) count++;
}
}
}
answer = count;
return answer;
}
□코드1 분석
□완성 코드2
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// nums_len은 배열 nums의 길이입니다.
int solution(int nums[], size_t nums_len) {
int answer = -1;
//int arrSize = (nums_len * (nums_len - 1) * (nums_len - 2)) / ((nums_len - 1) * (nums_len - 2));
//int* addNum = (int*)malloc(sizeof(int) * nums_len);
int addNum = 0;
int count = 0;
int index = 0;
int ifNum=0;
for (int i = 0; i < nums_len; i++) {
for (int j = i + 1; j < nums_len; j++) {
for (int z = j + 1; z < nums_len; z++, index++) {
addNum = nums[i] + nums[j] + nums[z];
printf("%d ", addNum);
for (int index = 2; index < addNum; index++) {
if (addNum % index == 0) {
ifNum=0;
break;
}
else ifNum=1;
}
if (count == 1) count++;
}
}
}
answer = count;
return answer;
}
□코드2 분석