https://school.programmers.co.kr/learn/courses/30/lessons/136798
풀이 - 나의 생각
약수를 구하는 방법이 중요한 거 같다.
가장 좋은 방식은
1 ~ number까지의 약수를 미리 구해둔 후 처리하는 방법이 아닐까 생각한다.
확실히 그때 그때 약수를 구해서 처리하는 것보다는 빨랐다.
i 를 기준으로 i의 배수들에 반복하면서
해당 숫자의 약수 개수를 구할 수 있다.
이 방법이 하나씩 구하는 경우보다 훨씬 빠르다
코드
def solution(number, limit, power):
weight = 0
divisors = [0] * (number + 1)
for i in range(1, number + 1):
for j in range(i, number + 1, i):
divisors[j] += 1
for i in range(1, number + 1):
weight += divisors[i] if divisors[i] <= limit else power
return weight
def divisors(n, limit, power):
cnt = 0
for i in range(1, int(n**0.5) + 1):
if n % i == 0:
cnt += 2 if i != n//i else 1
return cnt if cnt <= limit else power
def solution(number, limit, power):
weight = 0
for n in range(1, number + 1):
weight += divisors(n,limit, power)
return weight
728x90
'프로그래머스 > Lv.1' 카테고리의 다른 글
대충 만든 자판 -Python, defaultdict, 구현 (1) | 2024.11.15 |
---|---|
2020 카카오 인턴십 > 키패드 누르기, 구현, abs (0) | 2024.11.15 |
공원 산책 - Python, 구현 (0) | 2024.11.14 |
체육복 - Python, set (0) | 2024.11.12 |
숫자 짝궁 - Python, Counter, extend (0) | 2024.11.10 |