본문 바로가기

c++/프로그래머스 1 Lv

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

문제

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

제한사항

  • 1 ≤ left ≤ right ≤ 1,000

문제 링크

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이[c++]

#include <string>
#include <vector>

using namespace std;

int solution(int left, int right) {
    int answer = 0;
    answer= (left+right)*(right-left+1)/2;
    for(int i=1;i*i<=1000;i++){
        if(left<=i*i&&i*i<=right)
            answer -= 2*i*i;
    }
    return answer;
}

약수의 갯수가 홀수인 경우는 제곱수일 경우이다. 따라서 주어진 left에서 right까지 숫자를 전부 더하고 그 사이에 존재하는 제곱수만 빼주면 된다.