순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다. 자연수 n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.
- 1 ≤ n ≤ 1,000,000
| n | result |
|---|---|
| 20 | 6 |
| 100 | 9 |
제곱근을 사용해서 약수구하는 방식으로 접근
class Solution {
public int solution(int n) {
int answer = 0;
for (int i = 1; i * i <= n; i++) {
if (n % i == 0) {
if(i * i == n) {
answer++;
} else {
answer += 2;
}
}
}
return answer;
}
}약수의 갯수를 구하는 것과 똑같은 문제다.
그냥 반복문을 수행하는 것보다 제곱근을 이용하면 시간복잡도를 O(n) -> O(√n)로 줄일 수 있다.
i값을 1부터 시작해서 제곱근이 아닐때는 (1, 36)처럼 한개의 쌍의 수가 해당되기 때문에 +2를 수행하고 (6)처럼 36의 제곱근인 수일 경우에는 ++연산을 수행해서 개수를 구한다.