티스토리 뷰

반응형

 

문제의 조건

 

1. 매개변수 left, right가 주어짐

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

 

2. left와 right 사이의 수들의 약수의 갯수를 구한 다음

약수의 갯수가 짝수이면 덧셈을 하고 홀수면 뺄셈을 함

 

3. 2번의 결과로 나온 값을 리턴 

 


#include <string>
#include <vector>
#include <map>

using namespace std;

int solution(int left, int right) {
    map<int, int> mapAliquot; //수와 그 약수의 갯수를 저장할 배열 
    int iCount = 0; 

    for (int i = left; right >= i; i++)
    {
        for (int j = 1; i >= j; j++)
        {
            //몫이 나누는 수보다 작아지기 전 까지만 나눠보면 됨
            int quotient = i / j; //몫
            int remainder = i % j; //나머지
            if (0 == remainder)
            {
                //약수의 갯수 카운트
                if (quotient == j) //몫이랑 나누는 수가 같으면 약수 1개 증가
                    iCount++;
                else
                    iCount += 2; //다르면 2개 증가 
            }

            if (j > quotient)
                break;
        }

        //수와 약수의 갯수 저장 후 카운트 변수 초기화 
        mapAliquot.insert(pair<int, int>(i, iCount));
        iCount = 0;
    }

    int answer = 0;

    for (auto count: mapAliquot)
    {
        if (0 == count.second % 2)
            answer += count.first;
        else 
            answer -= count.first;
    }

    return answer;
}

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함