💡문제 설명
💡입출력 예시
💡풀이
def solution(number, limit, power):
# 약수 개수를 저장할 리스트 초기화
ls2 = [0] * (number + 1)
# 각 숫자의 약수 개수 계산
# 외부 루프 : i 가 1부터 numbrer 까지 각 숫자를 순회
# 내부 루프 : j 가 i부터 i의 배수인 숫자를 순회
for i in range(1, number + 1):
for j in range(i, number + 1, i):
ls2[j] += 1
# 결과 계산
result = [power if l2 > limit else l2 for l2 in ls2[1:]]
answer = sum(result)
return answer
1. (number + 1) 개의 요소를 가지는 리스트를 생성하고 모든 요소를 '0'으로 초기화 합니다.
2. 이렇게 하면 1부터 'number' 까지의 숫자에 대해 약수 개수를 저장할 수 있는 공간을 확보할 수 있습니다.
3. 외부 루프는 1부터 number 까지의 숫자를 순회합니다. 'i' 는 현재 처리 중인 숫자입니다.
4. 내부 루프는 i부터 number 까지의 숫자를 'i'의 배수로 순회합니다. 즉, i의 배수인 숫자들을 찾는 역할을 합니다.
5. ls2[j] += 1 은 'j'의 약수 개수를 1 증가시킵니다. 이는 'j'가 'i'를 약수로 가지기 때문입니다.
6. 리스트 컴프리헨션을 사용하여 ls2 리스트의 각 요소를 검사합니다.
7. l2 가 limit 보다 크면 power 값을 사용하고, 그렇지 않으면 l2값을 그대로 사용합니다.
8. answer = sum(result) 를 사용해 리스트의 모든 요소를 더한 값을 answer 변수에 저장합니다.
💡예제
1. ls2 리스트 초기화
ls2 = [0, 0, 0, 0, 0, 0, 0]
2. 약수 개수 계산
- i = 1일 때: j = 1, 2, 3, 4, 5, 6 -> ls2 = [0, 1, 1, 1, 1, 1, 1]
- i = 2일 때: j = 2, 4, 6 -> ls2 = [0, 1, 2, 1, 2, 1, 2]
- i = 3일 때: j = 3, 6 -> ls2 = [0, 1, 2, 2, 2, 1, 3]
- i = 4일 때: j = 4 -> ls2 = [0, 1, 2, 2, 3, 1, 3]
- i = 5일 때: j = 5 -> ls2 = [0, 1, 2, 2, 3, 2, 3]
- i = 6일 때: j = 6 -> ls2 = [0, 1, 2, 2, 3, 2, 4]
3. 결과 계산
- ls2[1:]는 [1, 2, 2, 3, 2, 4]
- limit = 2이므로, 3과 4는 limit을 초과하여 power 값인 5로 대체됩니다.
- 결과 리스트는 [1, 2, 2, 5, 2, 5]
- answer = sum([1, 2, 2, 5, 2, 5]) = 17
반응형
'Programming > Python' 카테고리의 다른 글
[프로그래머스 Python] 체육복 (0) | 2024.08.06 |
---|---|
[프로그래머스 Python] 숫자 짝꿍 (0) | 2024.08.02 |
[프로그래머스 Python] 소수 만들기 (0) | 2024.07.18 |
[프로그래머스 Python] 카드 뭉치 (1) | 2024.07.17 |
[프로그래머스 Python] 명예의 전당 (1) (0) | 2024.07.16 |