코딩테스트 연습/프로그래머스

순서쌍의 개수

멍멍코 2023. 9. 6. 19:39

def solution(n):
    count = 0
    for i in range(1, int(n**0.5)+1): # n의 제곱근까지만 탐색
        if n % i == 0: # i가 n의 약수라면
            count += 1
    # n이 완전제곱수인 경우
    if n == int(n**0.5)**2:
        return count*2 - 1
    return count*2 # 각 약수에 대한 순서쌍이 2개씩 있습니다.

• 두 숫자의 곱이 n이 되려면, 해당 숫자 중 하나가 n의 약수여야 합니다.

따라서, n의 약수의 개수를 구하면 두 숫자의 순서쌍도 알 수 있습니다.

 예를들어, n = 12인 경우 약수는 1, 2, 3, 4, 6, 12이므로 순서쌍은 (1, 12), (2, 6), (3, 4), (4, 3), (6, 2), (12, 1) 총 6개 입니다.

 

그런데 이 중에서 (3, 4)와 (4, 3)과 같이 중복되는 경우가 있으므로 약수의 개수의 절반을 취하면 중복을 제거할 수 있습니다.

예를들어, 12의 제곱근은 대략 3.464 이고, 내림처리 할 경우 3 입니다.

3 까지의 12의 약수는 1, 2, 3으로 총 3개 이며 총 순서쌍은 3 * 2로 6개 입니다.

 

하지만, n이 9와 같이 완전 제곱수인 경우 순서쌍은 (1, 9), (3, 3), (9, 1) 으로 제곱근까지의 n의 약수의 개수 * 2 - 1을 해주어야 합니다.

'코딩테스트 연습 > 프로그래머스' 카테고리의 다른 글

배열의 원소 삭제하기  (0) 2023.09.06
접미사인지 확인하기  (0) 2023.09.06