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

이정연·2022년 12월 28일
0

CodingTest

목록 보기
102/165

소개

문제 링크

약수의 개수를 구하는 것이 핵심이었던 문제.

약수의 개수를 구하는 수학적인 방법이 없을까 고민하다가 그냥 완전 탐색 기법으로 접근하였다.

설계

  • count: 약수의 개수를 반환해주는 함수

  • 1부터 number까지 count

  • count <= limit: 제한 수치 넘지 않았으므로 count를 그대로 철의 무게 합산

  • count > limit: 제한 수치를 넘었으므로 문제 조건에 따라 power를 철의 무게로 합산

count

  • parameter: n / return: 약수의 개수

  • 1~루트n까지 n과의 나머지 연산이 0인지 확인

  • 나머지 연산이 0 --> 약수임

  • 약수의 개수 증가

  • 루트 n까지 순회하므로 최종 약수의 개수는 2배 곱해줘야 함

  • 다만, 제곱근(ex 루트 16 = 4)같은 경우는 중복되므로 약수의 개수에서 1 빼줘야 함

코드

# 약수의 개수
def count(n):
    cnt = 0
    for i in range(1,int(n**0.5)+1):
        if n%i == 0:
            cnt += 1
    cnt *= 2
    if n**0.5 == int(n**0.5):
        cnt -= 1
    return cnt

def solution(number, limit, power):
    answer = 0
    for n in range(1,number+1):
        if count(n) <= limit:
            answer += count(n)
        else:
            answer += power
    return answer
profile
0x68656C6C6F21

0개의 댓글