알고리즘 연습 [숫자의 표현]
숫자의 표현
문제
수학을 공부하던 민지는 재미있는 사실을 발견하였습니다. 그 사실은 바로 연속된 자연수의 합으로 어떤 숫자를 표현하는 방법이 여러 가지라는 것입니다. 예를 들어, 15를 표현하는 방법은
(1+2+3+4+5)
(4+5+6)
(7+8)
(15)
로 총 4가지가 존재합니다. 숫자를 입력받아 연속된 수로 표현하는 방법을 반환하는 expressions 함수를 만들어 민지를 도와주세요. 예를 들어 15가 입력된다면 4를 반환해 주면 됩니다
나의 풀이
def expressions(num):
result = 1
for i in range(1, (num + 1) // 2):
a = []
while sum(a) < num:
a.append(i)
i += 1
if sum(a) == num:
result += 1
return result
리스트로 풀었는데, 굳이 리스트로 풀지 않아도 i값을 계속 더하는 변수를 만들어도 됐었음.
다른풀이
def expressions(num):
return len([i for i in range(1,num+1,2) if num % i is 0])
이런 패턴이 있는 줄 몰랐음. ㅇ0ㅇ