[프로그래머스 Level2][Python] 숫자의 표현

토끼는 개발개발·2022년 1월 9일
0

Programmers

목록 보기
64/68
post-thumbnail
post-custom-banner

[프로그래머스 Level2] 숫자의 표현

https://programmers.co.kr/learn/courses/30/lessons/12924

문제설명 📖

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

입출력 예



문제접근 💡

  1. 이중 for문 사용해서 연속으로 숫자를 더해준다.
  2. 합한 값이 n과 같으면 cnt 에 1을 더하고 break
  3. 효율성을 위해 합한 값이 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: 공차)

  1. 연속된 수이므로 공차 d = 1, 따라서 S = n(2a+n-1)/2

  2. 식을 정리하면, a = S/n + (1-n)/2

  3. a가 자연수가 되기 위해서는
    - S/n이 자연수: n은 S의 약수(S % n == 0)
    - (1-n)/2이 자연수: n은 홀수


등차수열의 합을 이용해야 하나 고민하다 그냥 이중포문 돌리는게 더 빨리 풀릴 것 같아서 직관적으로 풀었다.
수열로 푼 풀이를 보니 수열을 코딩으로 잘 작성할 수 있다면 훨씬 더 빨리 간편한 코드로 작성할 수 있을 것 같다.

profile
하이 이것은 나의 깨지고 부서지는 기록들입니다
post-custom-banner

0개의 댓글