문제

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

풀이

시도 1

1부터 n의 절반까지 하나씩 덧셈하면서 n을 넘어가면 break, n의절반 + n의절반+1은 무조건 n을 넘어가니 break를 걸었습니다. 본인의 수도 포함되야 하므로 리턴할때 1을 더했습니다. 95.8점으로 실패하였습니다.

solution.py
 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의 약수여야 한다.

solution.py
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


다른사람 풀이

solution.py
1
2
def expressions(num):
    return len([i  for i in range(1,num+1,2) if num % i is 0])