문제 설명

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


  • # 입출력 예
    n return
    15 4


    # Idea

    완전탐색법으로 풀어보고, 성능을 끌어올리는 코드를 작성해 봅시다!!




    # Code ```python def solution(n): answer = 0 temp = 0 for i in range(1,n): temp = i for j in range(i+1, n+1): if temp > n: break if temp == n: # print("Success") answer += 1 break temp += j # print("Success") answer += 1 return answer ``` # Explain 코드 설명을 간단히 하자면, 주석처리된 출력문을 실행해보면,
    연속된 자연수의 합으로 n을 나타낼수있는만큼 "Success"가 출력되게 된다.

    이중 포문을 써서 1~15까지, 2~15까지.... 마지막은 15가 되면 포문을 빠져나오고, 15까지 조건에 부합하니 한번더 증가시켜준다.
    정상적으로 실행은 되지만, 효율성 테스트에서 실패했다.. 그리고 곰곰히 생각해 봤다.
    최종코드는 아래와 같다!!



    ```python def solution(n): answer = 1 for i in range(1,n//2 + 1): temp = i for j in range(i+1, n+1): if temp > n: break if temp == n: answer += 1 break temp += j return answer ```





    다른 풀이 #1
    ```python def solution(n): return len([i for i in range(1,n+1,2) if n % i is 0]) ``` 설명은 아래 링크를 클릭해주세요!!

    https://gkalstn000.github.io/2021/01/21/%EC%88%AB%EC%9E%90%EC%9D%98-%ED%91%9C%ED%98%84/

댓글남기기