본문 바로가기
프로그래머스/C

[프로그래머스/C]프로그래머스 Level 1 : 약수의 개수와 덧셈 C언어

by starfish22 2021. 11. 26.
728x90

▶문제 : 코딩 테스트 연습 - 약수의 개수와 덧셈 | 프로그래머스 (programmers.co.kr)

 

코딩테스트 연습 - 약수의 개수와 덧셈

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주

programmers.co.kr

 

▶코드 작성

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int left, int right)
{
    int answer = 0;
    int num, i, count;
    for (num = left; num <= right; num++)
    {
        count = (num == 1) ? 1 : 2; //값이 1일 때 count=1 , 아니면 1과 자기자신 count=2
        for (i = 2; i <= num / 2; i++)//약수는 값을 2로 나눈것보다 크지 않다
        {
            if (num % i == 0)//약수 구하기
            {
                count++;
            }
        }
        answer += (count % 2 == 0) ? num : -num; //약수 개수가 짝수면 + , 홀수면 -
    }
    return answer;
}

 

▶해석

left에서 right까지 사이의 모든 수에서 먼저 left값이 1부터 시작할 때 삼항 연산자를 이용해 count = 1을 하고 1이 아닌 나머지 값은 1과 자기 자신이 약수 고정이므로 count = 2를 한다. i = 2부터 값을 2로 나눈 값까지 반복문으로 1씩 더해주고 i값을 나눈 나머지가 0이면 약수이므로 count ++ 해준다. 마지막으로 answer변수에 약수의 개수인 count 가 짝수면 더하고 홀수면 빼주어 총 계산 값을 반환한다.

728x90

댓글