👨🏻‍💻알고리즘/프로그래머스

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

waveofmymind 2023. 2. 11. 15:32

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/136798

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

코드

def solution(number, limit, power):
    answer=0
    for num in range(1,number+1):
        cnt = 0
        for i in range(1,int(num**(1/2))+1):
            if num%i == 0:
                if i == num//i:
                    cnt += 1
                else:
                    cnt += 2
            if cnt > limit:
                answer += power
                break
        else:
            answer += cnt    
    return answer

풀이

  • 약수를 구하는 로직에서, 단순히 1부터 num까지 num을 나눈 나머지가 0이 되는 수의 개수를 체크할 경우 시간초과가 발생한다.
  • 약수를 구할 때는 무조건 num의 제곱근까지만 확인해보는 것을 기억해놓자.
  • 만약 num이 9일경우 3x3이 발생하면 3이 1번만 카운트 되어야 하므로, i가 num//i랑 같을 경우 cnt를 1만 더해주었다.
  • 만약 cnt가 limit을 넘을 경우 그자리에 브레이크.