알고리즘 문제 풀이
[C++] 프로그래머스 약수의 개수와 덧셈 풀이
코딩류
2021. 9. 26. 19:13
반응형
문제의 조건
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;
}
반응형