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

단간단간·2024년 4월 9일
0

알고리즘 문제

목록 보기
54/106

문제 링크:

https://school.programmers.co.kr/learn/courses/30/lessons/136798

회고:

  • 시간 효율성 문제
  • 숫자 하나하나 1~숫자 로 나눠가면서 약수의 개수가 몇개인지 구하는 것 보다는, 아래처럼 리스트(number_of_divisors)를 하나 만들어서 해당 약수로 나눠진다고 판단이 되는 곳에 +1 씩 증분을 시켜주는게 효율적이다.

python

def solution(number, limit, power):
    # 약수 개수 리스트
    number_of_divisors = [0] * (number + 1)
    for i in range(1, number + 1):
        for j in range(1, number // i + 1):
            number_of_divisors[i * j] += 1

    # 철 합산
    sum_value = 0
    for i in range(1, number + 1):
        count = number_of_divisors[i]
        sum_value = sum_value + count if count <= limit else sum_value + power

    return sum_value


if __name__ == "__main__":
    result = solution(5, 3, 2)
    print(result)
10
profile
simple is best

0개의 댓글