문제 설명
두 정수 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 |
---|