프로그래머스 – 숫자의 표현 문제 Python

프로그래머스 문제풀이

문제

문제설명

Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다.

  • 1 + 2 + 3 + 4 + 5 = 15
  • 4 + 5 + 6 = 15
  • 7 + 8 = 15
  • 15 = 15

자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요.

제한사항

  • n은 10,000 이하의 자연수 입니다.

입출력 예

nresult
154

입출력 예 설명

입출력 예#1
문제의 예시와 같습니다.

문제해결과정

  1. n이라는 수를 만들 수 있는 연속된 자연수들의 집합 수를 구하면 된다.
  2. 예시에서 보이듯이 시작 자연수가 기준으로 연속된 수들을 더해서 n이 되는 경우를 카운트하면 된다.

위 같은 문제 및 제한사항을 해석하고 문제풀이를 시작하면 됩니다.

나의 풀이

def solution(n):
    answer = 0
    for i in range(1,n+1):        # 시작 자연수는 1~n까지이므로 range(1,n+1) 
        ttl_sum=0                 # 자연수들의 합산 결과를 담을 변수
        for i2 in range(i,n+1):   # 시작 자연수부터 n까지 합산하기 위해 range(i, n+1)
            ttl_sum += i2         # 수를 더한다
            if ttl_sum==n:        # 합산변수가 n과 같으면 카운트하고 반복문 종료
                answer += 1       
                break
            if ttl_sum > n:       # 합산변수가 n을 초과하면 반복문 종료
                break
    return answer

다른 사람의 풀이

수학공식을 이용한 풀이를 가져와봤습니다.
저는 등차수열의 합으로 구한것이라는데 뭔지 기억이 안나네요. 배웠던 것은 같은데…ㄷㄷ
문제 자체는 어렵지않았는데 이 해답은 이해하기가 어렵네요. 수학부터 다시 공부해야겠어요…

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