https://programmers.co.kr/learn/courses/30/lessons/12924
Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다.
자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요.
제한사항
입출력 예
- 이중 for문 사용해서 연속으로 숫자를 더해준다.
- 합한 값이 n과 같으면 cnt 에 1을 더하고 break
- 효율성을 위해 합한 값이 n을 초과하면 break
def solution(n): answer = 0 tmp = 0 for i in range(1,n+1): for j in range(i,n+1): tmp += j if tmp == n: answer += 1 break elif tmp > n: break tmp = 0 return answer
def solution(n): return len([i for i in range(1,n+1,2) if n % i is 0])
등차수열 수학 공식을 이용한 풀이다.
등차수열의 합 S = {n(2a+n-1)d}/2 (d: 공차)
연속된 수이므로 공차 d = 1, 따라서 S = n(2a+n-1)/2
식을 정리하면, a = S/n + (1-n)/2
a가 자연수가 되기 위해서는
- S/n이 자연수: n은 S의 약수(S % n == 0)
- (1-n)/2이 자연수: n은 홀수
등차수열의 합을 이용해야 하나 고민하다 그냥 이중포문 돌리는게 더 빨리 풀릴 것 같아서 직관적으로 풀었다.
수열로 푼 풀이를 보니 수열을 코딩으로 잘 작성할 수 있다면 훨씬 더 빨리 간편한 코드로 작성할 수 있을 것 같다.