본문 바로가기

내일배움캠프

내일배움캠프 언리얼트랙 11일차

날씨가 화창해서 산책가기 좋아요!

오늘의 학습

- C++ 강의


코드카타

약수의 개수와 덧셈

약수의 개수가 짝수인 수는 더하고 홀수인 수는 빼는 간단한 문제이다.

 

int solution(int left, int right) {
    int answer = 0;
    for(int i=left; i<=right; i++)
    {
        int num = 0;
        for(int j=1; j<=i; j++)
        {
            if(i%j==0) num += 1;
        }
        if(num%2==0)
        {
            answer += i;
        }
        else
        {
            answer -=i;
        }
    }
    return answer;
}

이렇게 보니 코드가 좀 지저분해보인다. 방법이 없을까 생각하다가 Gemini에게 약수의 개수가 홀수인 수들의 특징을 물어보았다.

Gemini가 말하길, 약수의 개수가 홀수인 수들은 제곱수들이라고한다. 생각해보니 그렇다. 제곱수들만이 제곱되는 수 하나를 약수로 더 가지기 때문에 제곱수들의 약수만이 홀수이다. 그렇다면 이전에 공부했던 sqrt를 사용하면 코드를 더 간단하게 구성할 수 있을것이다!

 

int solution(int left, int right) {
    int answer = 0;
    for(int i=left; i<=right; i++)
    {
        int odd=sqrt(i);
        answer += (odd * odd == i) ? -i : i;
    }
    return answer;
}

훨씬 깔끔하고 보기 좋다 ㅎㅎ