기사단원의 무기

Kylie·2023년 1월 13일

프로그래머스 Lv.1

목록 보기
62/69

내 코드 (시간 초과)

def solution(number, limit, power):
    a = []
    # 약수 구하기
    for i in range(1, number+1):
        cnt = 0
        for j in range(1, i+1):
            if i%j == 0:
                cnt += 1
        a.append(cnt)
    # 넘는 애들 -> Power로 대체
    for i in range(number):
        if a[i] > limit:
            a[i] = power
'''        
    return sum(a)

내 코드

def solution(number, limit, power):
    a = []
    # 약수 구하기
    for i in range(1, number+1):
        cnt = 0
        for j in range(1, int(i**0.5)+1):
            if i%j == 0:
                if j == i//j:
                    cnt += 1
                else:
                    cnt += 2
        a.append(cnt)
    # 넘는 애들 -> Power로 대체
    for i in range(number):
        if a[i] > limit:
            a[i] = power
'''        
    return sum(a)

+8

테스트 1 〉 통과 (32.75ms, 10MB)
테스트 2 〉 통과 (5.18ms, 10.4MB)
테스트 3 〉 통과 (2.12ms, 10.3MB)
테스트 4 〉 통과 (6.93ms, 10.3MB)
테스트 5 〉 통과 (1.48ms, 10.3MB)
테스트 6 〉 통과 (30.67ms, 10.2MB)
테스트 7 〉 통과 (5.03ms, 10.3MB)
테스트 8 〉 통과 (4.63ms, 10.2MB)
테스트 9 〉 통과 (48.13ms, 10.3MB)
테스트 10 〉 통과 (2.11ms, 10.1MB)
테스트 11 〉 통과 (727.10ms, 10.8MB)
테스트 12 〉 통과 (808.54ms, 11.1MB)
테스트 13 〉 통과 (735.20ms, 11.1MB)
테스트 14 〉 통과 (753.19ms, 11MB)
테스트 15 〉 통과 (899.85ms, 11.1MB)
테스트 16 〉 통과 (860.90ms, 10.9MB)
테스트 17 〉 통과 (0.01ms, 10.1MB)
테스트 18 〉 통과 (818.37ms, 11MB)
테스트 19 〉 통과 (5.04ms, 10.2MB)
테스트 20 〉 통과 (4.93ms, 10.3MB)
테스트 21 〉 통과 (0.02ms, 10.2MB)
테스트 22 〉 통과 (0.02ms, 10.2MB)
테스트 23 〉 통과 (0.03ms, 10.2MB)
테스트 24 〉 통과 (850.71ms, 11MB)
테스트 25 〉 통과 (814.25ms, 11.1MB)
테스트 26 〉 통과 (1.34ms, 10.4MB)
테스트 27 〉 통과 (1.32ms, 10.2MB)

다른 풀이

def cf(n): # 공약수 출력
    a = []
    for i in range(1,int(n**0.5)+1):
        if n%i == 0:
            a.append(n//i)
            a.append(i)
    return len(set(a))
def solution(number, limit, power):
    return sum([cf(i) if cf(i)<=limit else power for i in range(1,number+1)])

다른 풀이

def get_cds(n, limit , power):
    cnt = 0
    for i in range(1, int(n**(1/2))+1): # ★포인트1. 제곱근만큼만 반복
        if n%i == 0:
            if i == n//i: # 제곱근일 경우 -> 1개만 카운트하기
                cnt += 1
            else:
                cnt += 2 # 제곱근이 아닐 경우, 2개 카운트 (i, n//i)
        if cnt > limit:  # ★포인트2. 소수의 개수가 limit를 넘어가면
            return power #            강제로 power만큼을 return 
    return cnt
'''    
def solution(number, limit, power):
    total = 1
    for i in range(2, number+1):
        len_cds = get_cds(i, limit, power)
        total += len_cds
'''
    return total
profile
딥린이

0개의 댓글