본문 바로가기

Algorithm/Programers - C++

[프로그래머스]약수의 개수와 덧셈

문제

 

풀이

#include <string>
#include <vector>
#include <cmath>
using namespace std;

int solution(int left, int right) {
    int answer = 0;
    for(int i= left; i<=right; i++){
        if(pow((int)sqrt(i),2) == (float)i) answer-=i;
        else answer+=i;
    }
    return answer;
}

제곱수는 약수의 개수가 홀수이니, 제곱수만 값을 빼주었다.

 

 

 


 

다른 사람 풀이

int sign(int n, int count = 1) {
    for (int i = 1, last = n >> 1; i <= last; ++i) if (n % i == 0) ++count;
    return count & 1 ? -1 : 1;
}
int solution(int a, int b) { return a > b ? 0 : sign(a)*a + solution(a + 1, b); }

 

solution을 재귀 함수로 만들었고, 

sign 함수의 count & 1 부분을 이용하여 홀수, 짝수를 구분했다.

 

 

 

 

다양한 풀이들을 리뷰하는게 공부하는데 많은 도움이 되는 것 같다.