본문 바로가기
Programming/Python

[프로그래머스 Python] 기사단원의 무기

by 용스토리랜드 2024. 7. 24.

💡문제 설명

💡입출력 예시

 

 

💡풀이

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

 

 

 

 

  •  

 

 

 

반응형