본문 바로가기
💻 하나씩 차곡차곡/프로그래머스 (Python)

[프로그래머스/python/Lv1] 약수의 갯수와 덧셈

by 뚜루리 2023. 12. 16.
728x90
320x100
def solution(left, right):
    answer = 0
    cnt = 0
    list = []
    for i in range(left, right+1):
        for j in range(1, i+1):
            if i % j == 0:
                cnt += 1

        if cnt % 2 == 0:
            answer += i
            cnt = 0
        else :
            answer -= i
            cnt = 0

    return answer
  • ex) 20의 약수를 구할 땐 20 / 1~20까지를 나눴을 때 0 인 것들이 약수임. 맨날 까먹냐 진짜. 

 

(+) 쬑금 개선

def solution(left, right):
    answer = 0
    for i in range(left, right+1):
        cnt = 0
        for j in range(1, i+1):
            if i % j == 0:
                cnt += 1 
        
        if cnt % 2 == 0:
            answer += i
        else :
            answer -= i 
    
    return answer

각 if문에서 초기화 하지 않고 for문 안에서 초기화 해주기.

 

 

 

 (+) 다른 사람 풀이 

def solution(left, right):
    answer = 0
    for i in range(left,right+1):
        if int(i**0.5)==i**0.5:
            answer -= i
        else:
            answer += i
    return answer
  • i ** 0.5 : i의 제곱근을 구함. ex) 4의 제곱근을 구함. (4의 제곱근은 2)
  • 이 제곱근이 정수로 표현이 가능한 수는 약수의 개수가 홀수개
  • ex) 2를 제곱근으로 가지는 4는 1,2,4으로 3개, 5를 제곱근으로 가지는 25는 1,5,25 로 3개.
  • 반면 10의 제곱근은 3.1622776601683795 으로 정수가 아닌데 10의 약수는 1,2,5,10 이렇게 4개로 짝수임.
  • 그래서 제곱근에 int를 씌운 것과 안씌운 것이 동일한지 아닌지 판단
  • => 제곱수를 제외한 모든 정수들의 약수의 개수는 무조건 짝수 개수이며 제곱수만 홀수 개수임
728x90
320x100