[Python# 60] 기사단원의 무기

Gi Woon Lee·2024년 10월 1일
0

Python

목록 보기
13/13

60.기사단원의 무기

문제 설명

  • 목표: number 개의 기사가 있으며, 각 기사는 본인 번호의 약수의 개수에 해당하는 공격력을 가진다. 하지만 공격력이 limit를 넘으면 power로 제한된다.
  • 입력: number, limit, power
  • 출력: 모든 기사의 공격력을 합한 값을 반환

해결 전략

  1. 약수의 개수를 구하는 함수: 주어진 숫자의 약수 개수를 계산하는 함수를 만든다.
  2. 공격력 점검 및 조정: 각 기사의 공격력을 계산하면서, limit을 초과하면 power로 변경한다.
  3. 총 공격력 합산: 모든 기사의 공격력을 합산하여 반환한다.

구현 내용

  • count_divisors(n): 주어진 n의 약수 개수를 세는 함수.
  • solution(number, limit, power): 전체 기사의 공격력을 계산하여 반환하는 함수.

코드 구현

# 약수의 개수를 구하는 함수
def count_divisors(n):
    count = 0
    for i in range(1, n + 1):  # range(1, n+1)로 n의 약수를 구한다.
        if n % i == 0:
            count += 1
    return count

# 각각의 공격력(약수의 개수)를 점검하면서 limit에 걸리면 power로 바꿔! 그리고 전부 더해!
def solution(number, limit, power):
    weight = 0

    for knight in range(1, number + 1):
        total_power = count_divisors(knight)  # 현재 기사 번호의 약수 개수를 구한다.
        if total_power > limit:
            weight += power  # limit 초과 시 power로 설정
        else:
            weight += total_power  # 그렇지 않으면 약수 개수로 설정
    
    return weight

# 예시 테스트
number = 10
limit = 3
power = 2
print(solution(number, limit, power))  # 결과: 21

알게 된 점

  • range(이상, 미만)의 개념을 잊지 말자. (예: range(1, n + 1))
  • 약수 개수를 구하는 함수 구조는 자주 사용되므로 숙지하자.

0개의 댓글