알쿼리즘: 완전제곱수를 이용한 약수의 개수 판별

2024. 7. 15. 09:03전처리/PYTHON

 

01 수박 반복하는 방법의 차이


def solution(n):
    return ''.join(['수' if i%2!=0 else '박' for i in range(1, n+1)])
def solution(n):
    return ('수박' * n)[:n]

- 전자는 글자의 위치가 짝수인지 홀수인지에 따라 '수'와 '박'을 구분하고 join()으로 붙여준다.

- 후자는 주어지는 수만큼 반복시키고 문자열 슬라이딩을 통해 간단하게 출력시켰다.

 

02 약수를 구하는 공식의 차이


def solution(left, right):
    result=[]
    for i in range(left,right+1):
        num=[e for e in range(1,i+1) if i%e==0]
        if len(num)%2==0:
            result.append(i)
        else:
            result.append(-i)

    return sum(result)
def solution(left, right):
    return sum(i if len([e for e in range(1, i + 1) if i % e == 0]) % 2 == 0 else -i for i in range(left,right+1))
def solution(left, right):
    return sum(-i if int(i ** 0.5) ** 2 == i else i for i in range(left, right + 1))

- 전자는 <약수>를 모두 구해 짝홀수를 판별한 다음 음양을 붙여 sum 집계함수로 합계를 구했다. 

- 후자는 <완전 제곱수>를 이용해 판별했다. 제곱근X제곱근 즉, 동일 수를 곱해서 원래의 숫자가 될 경우 약수는 하나만 나오니까 홀수되는 점을 이용했다.