프로그래머스Lv2_숫자의 표현
Dec 29, 2020
»
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