오늘의 문제 풀이의 핵심은 약수의 개수가 짝수인지 홀수인지를 판별하는 것이었다.
머리를 싸매다가 도저히 방법을 못 찾겠어서 혹시 Linq에 약수의 개수를 구하는 방법이 있나 찾아보다가 다른 것을 찾게 되었는데, 바로 어떤 수 x의 약수들은 x의 제곱근을 기준으로 서로 짝이라는 점이다. 바로 심봉사처럼 눈이 번쩍 뜨이는 기분을 느꼈다. 제곱근을 기준으로 서로 짝이라면, 제곱근이 정수라면 약수의 개수는 홀수, 아니라면 짝수라는 소리이기 때문이다. 따라서 이를 통해 문제를 해결할 수 있었다!
using System;
public class Solution
{
public int solution(int left, int right)
{
int answer = 0;
for(int i = left; i <= right; i++)
{
if (MathF.Sqrt(i) == (int)MathF.Sqrt(i)) answer -= i;
else answer += i;
}
return answer;
}
}
확실히 코테를 많이 해봐야 이런 편법?도 알 수 있구나... 라는 것을 느꼈다.
if (MathF.Sqrt(i) == (int)MathF.Sqrt(i)) answer -= i;
이 코드는 i의 제곱근이 정수인지 아닌지를 판단하는 코드로, 정수가 맞다면 약수의 개수는 홀수 개이기 때문에 answer에서 i를 빼주었다.