본문 바로가기

문제풀이

[프로그래머스] level1 약수의 개수와 덧셈(python)

문제 설명

 

제한사항

 

입출력 예

 


나의 풀이(전체 코드)

 

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

 

이 문제는 약수의 개수가 짝수인 수는 더하고(+), 약수의 개수가 홀수인 수는 뺀(-) 값을 모두 더한 값이 return 돼야 한다.

입출력 예 설명을 보면서 이해를 하면 수월하게 풀 수 있는 문제였다.

 

첫번째 항목 입출력 예시

 

 

 

우선 입력받은 두 정수 left부터 right 까지의 모든 수들 중에서 약수의 개수를 판단해야 하기 때문에 반복문은 left 부터 right+1까지로 조건을 걸고, 약수의 개수를 판단해 줄 count 변수를 선언해준다.

 

for i in range(left, right+1):
        count = 0

 

이제 중첩 반복문을 선언해주는데 조건은 약수의 조건인 1부터 i+1(첫 번째 반복문의 숫자) 까지로 정의한다.

 ex) i = 13일 때, 두 번째 반복문의 조건은 1 ~ 14까지 즉, j가 최대 13까지 늘어난다.

그리고 만약 i를 j로 나눈 나머지가 0일 때 약수이므로, count 변수를 1 증가시켜준다.

 

마지막으로 조건문을 사용하여 count가 짝수인지 홀수인지를 판단하여 총합(answer)의 결과에 반영해준다.

만약 짝수라면 더하기(+)를, 홀수라면 빼기(-)를 적용한다.

 

for j in range(1, i+1):
            if i%j == 0:
                count += 1
        if count%2 == 0:
            answer += i
        else:
            answer -= i

 

결과는 성공!