본문 바로가기

Python/오늘의 실수

변수 선언 위치

문제 설명

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

 

제한사항

  • 1 ≤ left ≤ right ≤ 1,000

입출력 예

leftrightresult

13 17 43
24 27 52

 

▶️ 내 코드 (정답)

def solution(left = 13, right = 17):
    answer = 0
    for x in range(left, right+1):
        cnt = 0
        for n in range(1, x+1):
            if x%n == 0:
                cnt += 1
            else:
                cnt
        if cnt%2 == 0:
            answer += x
        else:
            answer -= x
    return answer

 

❗️어려웠던 점

  • 변수 선언 위치를 신경쓰지 않고 대부분 함수 정의한 후 바로 주르륵 했었음.

⇒ 변수 선언을 어디서 하느냐에 따라서도 값이 달라짐

 

▶️ 오류 코드

def solution(left = 13, right = 17):
    answer = 0
    cnt = 0
    for x in range(left, right+1):
        list1 = []
        for n in range(1, x+1):
            if x%n == 0:
                cnt += 1
            else:
                cnt
        list1.append(cnt)
        print(list1)
    if cnt%2 == 0:
        answer += x
    else:
        answer -= x
    return answer

변수 x 값에 따라 약수 개수 cnt가 세어져야 하는데, 자꾸 누적해서 더해지는게 문제였음!!!

cnt = 0

 

변수 선언의 위치를 두 for문 사이로 옮기니 x의 약수 개수가 구해졌음.

def solution(left = 13, right = 17):
    answer = 0
    for x in range(left, right+1):
        list1 = []
        cnt = 0
        for n in range(1, x+1):
            if x%n == 0:
                cnt += 1
            else:
                cnt
        list1.append(cnt)
        print(list1)
    if cnt%2 == 0:
        answer += x
    else:
        answer -= x
    return answer

 

👁️👁️참고할만한 코드

#1. 제곱수는 약수의 개수가 홀수! (4, 9 ,16, 25 …)

#1.
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
    
#2.
def solution(left, right):
	return sum(n if (n ** 0.5) % 1 else -n for n in range(left, right + 1))

'Python > 오늘의 실수' 카테고리의 다른 글

EOFerror / return과 print의 차이점  (0) 2024.05.01