카테고리 없음

[python][프로그래머스_lv1] 기사단원의 무기 (feat. 공약수)

허니비 honeybee 2023. 3. 31. 01:27

 

 

오늘도 효율성은 개나 줘버린 나의 첫 코드 

그냥 의식의 흐름대로 짰는데 파이썬 문법 연습한다 생각하고 ㅋㅋㅋ

효율성 테스트에서 실패 ~

넌 왜그렇게 인내심이 없는거니? 

 

def solution(number, limit, power):
    #약수 개수 리스트 구하기 
    li = []
    for j in range (1, number+1):
        count = 0 
        for i in range(1, j+1):
            if j%i == 0: 
                count += 1 
        
        li.append(count)

    #제한보다 큰 것은 바꿔주고 합계 리턴 
    for i in range(len(li)):
        if li[i] > limit:
            li[i] = power
            

    return sum(li)

 

 

 

약수의 개수 구하는 부분에서 이중 포문을 쓰면서 시간초과가 된 것 같다

 

근데 아무리 생각해봐도 코드개선은 못해먹겠어서 그냥 다른 분들의 풀이를 봤음

코드개선이 꼭 필요할까..? 

그냥 돌아가기만 하면 된거 아닐ㄲ ㅏ..?

 

 

다른 분들의 풀이 

공약수를 구하는 방향으로 접근하신 분인데 n의 제곱근까지만 포문을 도는게 포인트같음 !

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)])

 

 

오늘의 교훈 

약수의 개수 구하는 문제 나오면 공약수를 구해보자 ~ 

 

 

728x90