문제
풀이
#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 부분을 이용하여 홀수, 짝수를 구분했다.
다양한 풀이들을 리뷰하는게 공부하는데 많은 도움이 되는 것 같다.
'Algorithm > Programers - C++' 카테고리의 다른 글
[프로그래머스] 2016년 (0) | 2022.02.04 |
---|---|
[프로그래머스]두 개 뽑아서 더하기 (0) | 2022.02.03 |
[프로그래머스]3진법 뒤집기 (0) | 2022.02.02 |
[프로그래머스]포켓몬 / Set (0) | 2022.01.31 |
[프로그래머스]탐욕법 - 체육복 (0) | 2022.01.30 |