문제 링크: 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을 넘을 경우 그자리에 브레이크.
'👨🏻💻알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv1. 문자열 나누기 (0) | 2023.02.12 |
---|---|
[프로그래머스] Lv1. 옹알이(2) (0) | 2023.02.12 |
[프로그래머스] Lv1. 숫자 짝꿍 (0) | 2023.02.11 |
[프로그래머스] Lv2. 수식 최대화 (0) | 2023.02.07 |
[프로그래머스] Lv2. 괄호 변환 (0) | 2023.02.06 |