📖Problem

🔍Institution

  1. 1부터 n까지의 숫자가 연속해야 하므로 이에 대한 외부 for문을 하나 만들고, 실제로 n과 같아질 때까지 값을 더해주는 내부 for문을 만든다.
    1. 내부 for문에서는 인덱스값인 j를 누적해서 sum에 더한다.
    2. sum이 n과 같아진다면 answer에 값을 하나 더 하고, 초과할 경우 for문에서 나온다.
  2. 외부 for문에서는 그 다음 i로 넘어가게 된다.

🔍Approach

🚩My submission

def solution(n):
    answer = 0
    
    for i in range(1, n+1):
        sum = 0
        for j in range(i, n+1):
            sum += j
            
            if sum == n:
                answer += 1
                break
            elif sum > n:
                break
                
    return answer

Untitled

🚩Others submission

참고 블로그: https://velog.io/@younge/Python-프로그래머스-숫자의-표현-연습문제Level-2

수학적 공식을 이용해 한 줄로 적은 코드가 있다.

def solution(n):
    return len([i  for i in range(1,n+1,2) if n % i is 0])

뭔 코드인지 이해가 안 되었지만, 참고한 블로거님께서 잘 설명해주셨다.

n 이하인 숫자 a부터 k개의 연속된 숫자의 합이 n이라고 가정한다면

a + (a+1) + (a+2) + ... + (a+k-1) = k(2a+k-1)/2 = n
a <= n
k < n
a,k : 자연수

위의 식을 정리를 이용한다. 위 식을 정리해보면 a = n/k + (1-k)/2가 된다.