https://school.programmers.co.kr/learn/courses/30/lessons/77884
프로그래머스lv1 정답률78% 약수의개수와덧셈
1. left부터 right까지의 모든 수들
코드화
left=13
right=17
#result=43
for i in range(left, right+1):
2. 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return
i로 숫자가 들어오고 약수를 구한다.
약수의 개수가 짝수인지 홀수인지 구한다
짝수면 스택으로 더하고 홀수면 버린다
약수구하기 코드
count=0
for j in range(1, i+1):
if i % j == 0: #나눈 나머지가 0이라면 즉 약수라면
count+=1 #카운트에 스택을 쌓아서 약수의 개수를 구한다
#count2=0
if count %2 == 0: #약수의 개수가 짝수라면
count2 += i #i를 카운트2에 쌓는다
정리
left=13
right=17
count2=0
#result=43
for i in range(left, right+1):
count=0
for j in range(1, i+1):
if i % j == 0: #나눈 나머지가 0이라면 즉 약수라면
count+=1 #카운트에 스택을 쌓아서 약수의 개수를 구한다
if count %2 == 0: #약수의 개수가 짝수라면
count2 += i #i를 카운트2에 쌓는다
print(count2)
문제를 잘못 봄
약수 개수가 홀수면 i를 - 를 해줘야 하는데 그냥 버렸다
코드 추가
left=13
right=17
count2=0
#result=43
for i in range(left, right+1):
count=0
for j in range(1, i+1):
if i % j == 0: #나눈 나머지가 0이라면 즉 약수라면
count+=1 #카운트에 스택을 쌓아서 약수의 개수를 구한다
if count %2 == 0: #약수의 개수가 짝수라면
count2 += i #i를 카운트2에 쌓는다
else:
count2 -= i
print(count2)
출력 43 정답!
함수로 변경
나의풀이 def solution(left, right): count2=0 for i in range(left, right+1): count=0 for j in range(1, i+1): if i % j == 0: #나눈 나머지가 0이라면 즉 약수라면 count+=1 #카운트에 스택을 쌓아서 약수의 개수를 구한다 if count %2 == 0: #약수의 개수가 짝수라면 count2 += i #i를 카운트2에 쌓는다 else: count2 -= i return count2
테스트 ㄱ
100% 정답
좋아요 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
이걸 보면
int(i0.5)==i0.5 라면 약수 개수가 홀수
int(i0.5)==i0.5 아니라면 약수 개수가 짝수
라는 말이 되는데
0.5승이라면 루트씌운 거고
루트에 인트 건거랑 그냥 루트랑 같으면 약수개수가 홀수라는 말인데
인트를 건다는 건 소수점 없애는 거고...
정리하면
-약수가 홀수개면 제곱수
약수가 짝수개면 제곱수가 아니다-
이건데 이걸 어떻게 이렇게 풀지
수학 배울 때 이미 알고 있던 원리였겠지?