본문 바로가기
algorithm/Programmers

[JAVA] 순서쌍의 개수(약수의 개수 구하는 알고리즘)

by 이쟝 2023. 1. 14.

문제를 읽어보니 약수의 개수를 구하는 것이어서, 약수의 개수 알고리즘을 검색했다.

class Solution {
    public int solution(int n) {
        int answer = 0;
        for(int i=1; i<=Math.sqrt(n); i++) {
            if(n%i== 0) { 
                // if divisors are equal, count +1
                if(n/i == i) answer ++;
                // otherwise count both
                else answer += 2;
            }
        }
        return answer;
    }
}

Math.sqrt( )는 제곱근 구해주는 거라서 sqrt 말고 i * i <= n 이렇게 해도 무방

그냥 i <= n 으로 해서 n%i == 0 일때 answer ++ 하는 것으로 하면 시간이 너무 오래걸려서 제곱근으로..!

이 부분을

if(n%i== 0) { 
    // if divisors are equal, count +1
    if(n/i == i) answer ++;
    // otherwise count both
    else answer += 2;
}

이렇게 바꿀 수도 있다.

if(n%i== 0) { 
    // if divisors are equal, count +1
    answer ++;
    // otherwise count both
    if(n/i != i) answer ++;
}

2. 다른 풀이 방법

class Solution {
    public int solution(int n) {
        int answer = n>1? 2: 1;
        for(int i = 2; i <= n/2; i++){
            if(n%i == 0) answer++;
        }
        return answer;
    }
}

answer 안에 3항 연산자를 쓸 생각을 하다니.... 신기하다.. 근데 시간은 2번이 더 오래걸리긴 한다..

약수 개수 구하는 알고리즘 생각해놔야겠다.

'algorithm > Programmers' 카테고리의 다른 글

[JAVA] 가위 바위 보  (0) 2023.01.18
[JAVA] 진료 순서 정하기  (0) 2023.01.14
[JAVA] 외계행성의 나이  (0) 2023.01.14
[JAVA] 배열 자르기  (0) 2023.01.13
[JAVA] 특정 문자 제거하기  (0) 2023.01.13