728x90
📌 문제
https://school.programmers.co.kr/learn/courses/30/lessons/12924
📌 문제 접근 방법
- n 이하의 자연수들 중에 연속으로 더해서 n이 되는 수를 찾는 문제
- n 이하의 자연수 x부터 시작해서 k개의 수를 더해서 n이 된다고 가정하면 다음과 같은 식이 나온다.
x + (x+1) + (x+2) + ... + (x+k-2) + (x+k-1) = n - 이를 계산하면,
k(2x+k-1)/2 = n - 이를 x를 기준으로 치환하면
x = n/k - (k-1)/2 - x는 자연수이므로, n/k와 (k-1)/2도 모두 자연수가 되어야한다.
이를 만족하려면, k는 n의 약수여야하고, 동시에 홀수여야만 한다. - 따라서 n의 홀수인 약수의 개수만 구하면 된다.
📌 코드
from math import sqrt
def solution(n):
answer = 0
for num in range(1, int(sqrt(n))+1):
quotient, remainder = divmod(n, num)
if not remainder:
if quotient%2:
answer += 1
if quotient != n//quotient and (n//quotient)%2:
answer += 1
return answer
728x90
'ALGORITHM > PROGRAMMERS' 카테고리의 다른 글
[PG/Python] 메뉴 리뉴얼 (0) | 2022.06.24 |
---|---|
[PG/Python] 광고 삽입 (0) | 2022.06.24 |
[PG/Python] 캐시 (0) | 2022.03.03 |
[PG/Python] N-Queen (0) | 2022.02.27 |
[PG/Python] 삼각 달팽이 (0) | 2022.02.27 |
댓글