GitHubSeob

C++ / 프로그래머스 / 약수의 개수와 덧셈 본문

Programmers/Level 1

C++ / 프로그래머스 / 약수의 개수와 덧셈

GitHubSeob 2021. 8. 21.

문제

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

 

코딩테스트 연습 - 약수의 개수와 덧셈

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

programmers.co.kr

문제풀이

수가 제곱수인지 아닌지만 판별하면 된다.

제곱수의 경우는 무조건 약수의 개수가 홀수가 되고, 아닌 경우는 짝수가 된다.

제곱수인지 판별하기 위해 제곱근을 구하는 sqrt함수를 이용한다.

double형 제곱근 - int형 제곱근을 해서 0이나 오면 제곱수이므로 그때만 answer -= idx,

이 외에는 제곱수가 아니므로 answer += idx를 한다.

 

코드

#include <string>
#include <vector>
#include <cmath>

using namespace std;

int solution(int left, int right) {
    int answer = 0;

    for (int idx = left; idx <= right; ++idx) {
        if ((double)sqrt(idx) - (int)sqrt(idx) == 0) answer -= idx;
        else answer += idx;
    }

    return answer;
}