[programmers/py] 기사단원의 무기

승민·2023년 4월 5일

알고리즘

목록 보기
8/171

기사단원의 무기

https://school.programmers.co.kr/learn/courses/30/lessons/136798?language=python3

문제 설명

  • 예를 들어, 15번으로 지정된 기사단원은 15의 약수가 1, 3, 5, 15로 4개 이므로, 공격력이 4인 무기를 구매합니다.
  • 만약, 이웃나라와의 협약으로 정해진 공격력의 제한수치가 3이고 제한수치를 초과한 기사가 사용할 무기의 공격력이 2라면, 15번으로 지정된 기사단원은 무기점에서 공격력이 2인 무기를 구매합니다.
  • 무기를 만들 때, 무기의 공격력 1당 1kg의 철이 필요합니다. 그래서 무기점에서 무기를 모두 만들기 위해 필요한 철의 무게를 미리 계산하려 합니다.

풀이

  1. 각 i마다 약수의 개수를 구합니다.
  2. 약수는 (i**0.5)+1까지만 해도 약수인지 아닌지 판별 가능합니다.
  3. 이를 이용해 i=8이면 1,2,4,8이 약수이고 총 4개입니다.
  4. 8//1=8 즉 8과 1이 약수라 cnt를 한 번 더 더해줍니다.
def solution(number, limit, power):
    answer = 0
    
    for i in range(1, number+1):
        cnt = 0 # 총 약수의 수
        for j in range(1, int(i**0.5)+1):
            if (i%j == 0) :
                cnt = cnt+1
                if i//j != j:
                    cnt += 1
            
            if cnt > limit :
                break;
        
        if cnt > limit :
            answer += power
        else : 
            answer += cnt
        
        
    return answer


# 각 기사는 자신의 번호의 약수 개수에 해당하는 공격력을 가진 무기를 구매
# 15의 약수는 4개 -> 공격력이 4 but 제한수치가 3이면 power로 변경
# 각 약수는 자신을 제외하면 n/2 보다 작은 값

0개의 댓글