https://school.programmers.co.kr/learn/courses/30/lessons/12924
시도 1
1부터 n의 절반
까지 하나씩 덧셈하면서 n을 넘어가면 break
, n의절반 + n의절반+1은 무조건 n을 넘어가니 break
를 걸었습니다. 본인의 수도 포함되야 하므로 리턴할때 1을 더했습니다
. 95.8
점으로 실패하였습니다.
1
2
3
4
5
6
7
8
9
10
11
12
|
def solution(n):
answer = 0
for x in range(1, (n + 1)):
temp = 0
for y in range(x, (n + 1) // 2 + 1):
temp += y
if temp == n:
answer += 1
break
elif temp > n:
break
return answer + 1
|
시도 2
규칙을 찾아봅니다.
1
2
3
|
x + (x+1) + ... + (x+k-1) = k(2x+k-1) / 2 = n
x = n/k + (1-k)/2
n/k와 (1-k)/2 가 자연수가 되어야하므로 k는 홀수이면서 n의 약수여야 한다.
|
1
2
3
4
5
6
|
def solution(n):
answer = 0
for i in range(1, n + 1, 2): # 2만큼 증가하여 짝수는 고려하지 않음
if n % i == 0:
answer += 1
return answer
|
다른사람 풀이
1
2
|
def expressions(num):
return len([i for i in range(1,num+1,2) if num % i is 0])
|