Code KATA/알고리즘 코드카타

[2025.01.03] 약수의 개수와 덧셈

iiblueblue 2025. 1. 3. 09:20

문제 설명

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

 

 

제한사항

  • 1<=left<=right<=1,000

 

 

입출력 예

left right result
13 17 43
24 27 52

 

 

문제 풀이

풀이 언어 : C++

#include <string>
#include <vector>

using namespace std;

int solution(int left, int right) {
    int answer = 0;
    int divisor_count; // 약수의 개수
    
    for(int i=left; i<=right; i++)
    {
        divisor_count=0; // 약수의 개수 초기화
        
        // 약수의 개수 구하기
        for(int j=1; j<=i; j++)
        {
            if(i%j==0)
            {
                divisor_count++; // 약수 개수 증가
            }
        }
        
        // 약수의 갯수가 짝수라면
        if(divisor_count%2==0)
        {
            answer+=i; // 더하기
        }
        else // 약수의 개수가 홀수라면
        {
            answer-=i; // 빼기
        }
    }
    return answer;
}

left부터 right 사이의 수들을 처리해야하니 일단 left부터 right까지 돌아가는 반복문을 만들어준다. 그리고 반복문을 돌면서 약수의 개수를 구하고 그 개수가 짝수인지 홀수인지 확인한 후 answer에 더하거나 빼주면 되는 것이다. 차례대로 진행해보자.

 

먼저 약수의 개수를 구한다. divisor_count라는 약수의 개수를 셀 변수를 하나 만들어주고 반복문 맨 앞에서 초기화 해준다. 반복문이 한번 돌아가면 다른 수로 개수를 구하는 것이기 때문에 0으로 초기화 해주어야 한다. 개수를 구하는 것도 반복문을 사용한다. 1부터 현재 수 i까지 반복문이 돌도록 하고 if문을 이용하여 i%j==0인 경우, 즉 j가 i의 약수인 경우만 divisor_cout를 업데이트 해준다.

 

반복문을 돌고 나오면 i의 약수의 개수가 구해져 있다. 이제 구해진 약수의 개수를 2로 나누어 나머지를 확인하고 나머지가 없다면 짝수이므로 answer+=i를 해주고 아닐 경우 홀수 이므로 answer-=i를 해준다.

 

 

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/77884

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr