숫자의 표현(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 이하의 자연수 입니다.

입출력 예제

nreturn
154

입출력 예에 대한 설명

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

나의 생각

먼저 규칙을 찾으려고 했다.
(n // 2) + 1 값부터는 시작할 필요가 없다는 것을 찾았다.
예시를 보고 n의 약수가 많이 포함되었다고 생각했지만 규칙을 찾지 못했다.
규칙을 찾지못해서 완전탐색을 생각했다.

솔루션

자기 자신을 포함하므로 answer을 1부터 시작한다.
sum() 메소드를 사용하기 위해서 배열을 만든다.
이중 for문을 돌고 n 값을 찾거나 넘어가면 탐색할 필요가 없으므로 다음 for문을 진행한다.

코드

  1. 첫번째 코드
    def solution(n):
     answer = 1
     numbers = [i for i in range(0, n + 1)]
     for i in range(1, n // 2 + 1):
         for j in range(i + 1, n // 2 + 2):
             if sum(numbers[i : j + 1]) == n:
                 answer += 1
                 break
             elif sum(numbers[i:j + 1]) > n:
                 break
    
     return answer
    
  2. 두번째 코드
    • sum() 메소드를 사용하지 않고, while문을 사용한다.
def solution(num):
    answer = 0
    for i in range(1, num + 1):
        s = 0
        while s < num:
            s += i
            i += 1
        if s == num:
            answer += 1

    return answer
  1. 세번째 코드
    • 수학을 이용한다..(원리는 모르겠다..)
def solution(num):
    return len([i  for i in range(1,num+1,2) if num % i is 0])