728x90
▶문제 : 코딩 테스트 연습 - 소수 만들기 | 프로그래머스 (programmers.co.kr)
▶코드 작성
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int func(int num)//소수 판별 함수
{
for (int i = 2; i <= num / 2; i++)
{
if (num % i == 0)
{
return 0;
}
}
return 1;
}
// nums_len은 배열 nums의 길이입니다.
int solution(int nums[], size_t nums_len)
{
int answer = 0;
int i, j, l;
int m; //짝수 개수
for (i = 0; i < nums_len - 2; i++)//배열길이보다 -2만큼
{
if (nums[i] % 2 == 0) m = 1; //짝수일 때 1
else m = 0;
for (j = i + 1; j < nums_len - 1; j++)//배열길이보다 -1만큼
{
if (nums[j] % 2 == 0) m++; //짝수일 때 +1
for (l = j + 1; l < nums_len; l++)
{
if (nums[l] % 2 == 0) m++; //짝수일 때 +1
if (m == 0 || m == 2)//세 숫자의 합이 홀수일 때
{
if (func(nums[i] + nums[j] + nums[l]) == 1)//소수일 때
{
answer++;
}
}
if (nums[l] % 2 == 0) m--; // +1 했다면 다시 -1
}
if (nums[j] % 2 == 0) m--; // +1 했다면 다시 -1
}
}
return answer;
}
▶해석
3중 반복문에 i값과 j값과 l 값을 효율적이게 초기값을 주었고, 각 세 숫자들의 합이 짝수인지 아닌지 확인하기 위해 변수 m을 이용해 짝수라면 +1 하고 m의 값이 0 또는 2라면 세 숫자들의 합이 홀수이기 때문에 소수 판별 함수에 적용하도록 만들었다.
728x90
'프로그래머스 > C' 카테고리의 다른 글
프로그래머스 Level 1 : 약수의 개수와 덧셈 C언어 (0) | 2021.11.26 |
---|---|
프로그래머스 Level 1 : 음양 더하기 C언어 (0) | 2021.11.26 |
프로그래머스 Level 1 : 내적 C언어 (0) | 2021.11.26 |
프로그래머스 Level 1 : 숫자 문자열과 영단어 C언어 (0) | 2021.11.19 |
프로그래머스 Level 1 : 로또의 최고 순위와 최저 순위 C언어 (0) | 2021.11.19 |
댓글