catbook 종원's 블로그 이사 온 블로그

프로그래머스Lv2_숫자의 표현

» Algorithm

문제

자연수 n 을 연속하는 자연수의 덧셈으로 표현할 수 있는 방법의 수를 리턴하여라.






접근법

마땅한 알고리즘이 생각나지않아 수학적 공식으로 접근하였다. 자연수의 등차수열의 합 공식을 이용하여 수식으로 풀어갔더니 풀렸다. 신기하다.




코드

def solution(n): 
    # a ~ b 까지 연속하는 자연수의 합 = (b - a + 1)(b + a)/2
    # n = (b - a + 1)(b + a)/2
    # 2n = (b - a + 1)(b + a)
    # temp[i][1] = b + a
    # temp[i][0] = b - a + 1
    temp = []
    answer = 0
    for i in range(1, int((2*n) ** 0.5)+1):
        if 2*n % i == 0:
            temp.append([i, int(2*n/i)])
    #print(temp)
    for i in temp:
        if int((i[1] - i[0] + 1) / 2) == (i[1] - i[0] + 1) / 2 and int((i[0] + i[1] - 1) / 2) == (i[0] + i[1] - 1) / 2:
            answer += 1   
    return answer






다른사람풀이

def expressions(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