약수의 개수를 구하는 것이 핵심이었던 문제.
약수의 개수를 구하는 수학적인 방법이 없을까 고민하다가 그냥 완전 탐색 기법으로 접근하였다.
count: 약수의 개수를 반환해주는 함수
1부터 number까지 count
count <= limit: 제한 수치 넘지 않았으므로 count를 그대로 철의 무게 합산
count > limit: 제한 수치를 넘었으므로 문제 조건에 따라 power를 철의 무게로 합산
parameter: n / return: 약수의 개수
1~루트n까지 n과의 나머지 연산이 0인지 확인
나머지 연산이 0 --> 약수임
약수의 개수 증가
루트 n까지 순회하므로 최종 약수의 개수는 2배 곱해줘야 함
다만, 제곱근(ex 루트 16 = 4)같은 경우는 중복되므로 약수의 개수에서 1 빼줘야 함
# 약수의 개수
def count(n):
cnt = 0
for i in range(1,int(n**0.5)+1):
if n%i == 0:
cnt += 1
cnt *= 2
if n**0.5 == int(n**0.5):
cnt -= 1
return cnt
def solution(number, limit, power):
answer = 0
for n in range(1,number+1):
if count(n) <= limit:
answer += count(n)
else:
answer += power
return answer