정리 노트

프로그래머스 약수의 개수(Python) 본문

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

프로그래머스 약수의 개수(Python)

꿈만 꾸는 학부생 2022. 7. 4. 14:19
728x90

https://programmers.co.kr/learn/courses/30/lessons/77884

 

코딩테스트 연습 - 약수의 개수와 덧셈

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주

programmers.co.kr

오랜만에 레벨 1 문제를 풀어보니 너무 쉬웠다. 루트를 이용해 약수의 개수를 찾는 횟수를 줄였다. 나의 코드는 아래와 같다.

from math import sqrt

def solution(left, right):
    answer = 0
    for n in range(left, right+1):
        counter = 0
        for i in range(1, int(sqrt(n)) + 1):
            if n % i == 0:
                if i**2 == n:
                    counter = counter * 2 + 1
                else:
                    counter += 2
        if counter % 2 == 0:
            answer += n
        else:
            answer -= n
    return answer

다른 사람의 풀이

다른 사람의 풀이를 봤는데.... 와... 한 수 배웠다.

제곱수는 약수의 개수가 홀수이고 아닌 수는 짝수라는 것을 찾아내 코드를 더욱 간결하게 만들었다. 그 코드는 아래와 같다.

https://programmers.co.kr/learn/courses/30/lessons/77884/solution_groups?language=python3 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

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

나의 코드에서 if-else문으로 counter 더하는 방법이 틀린 것을 보고 나도 이걸 눈치챘어야 했는데... 나도 언젠가 이렇게 깔끔하게 문제를 풀 날이 올까?

728x90