<로직 고민/>
- 일단 연속된 수의 합이 n과 같은 경우를 셀 answer
- 연속된 수의 시작이 될 k
- 연속된 수의 합 cons
- 이렇게 변수 셋을 선언하고 k가 n보다 작은 동안 while문이 계속 돌도록 한다
- k를 기준으로 1씩 늘려가며 cons에 값을 더해주고 15가 되면 answer에 1을 더해준 다음 for문을 나간다
- cons가 n보다 크면 바로 for문을 나간다
- for문을 나가면 cons는 0으로 리셋되고, k는 1 증가한다
- 이런 방식으로 풀었더니 시간은 좀 걸리지만 그래도 테스트 통과했다
- 근데 더 빠르게 풀 방법이 있겠지
- 내 방법은 1개씩 늘려가며 for문을 다 돌리는 방식이니까...
<완성된 풀이/>
def solution(n):
answer, k, cons = 1, 1, 0
while k < n:
for i in range(k, n + 1):
cons += i
if cons == n:
answer += 1
break
elif cons > n:
break
cons = 0
k += 1
return answer
<다른 사람 풀이/>
- 천재풀이1
def solution(n):
answer = 0
for i in range(1, n + 1):
if n % i == 0:
if i % 2 == 1:
answer += 1
return answer
- 이 문제의 정답은 홀수인 n의 약수의 개수란다....
- 아래 천재풀이2처럼 i를 2씩 증가시키면 6번째 줄을 없애서 더 효율적인 코드가 된다
def solution(n):
answer = 0
for i in range(1, n + 1, 2):
if n % i == 0:
answer += 1
return answer
- 천재풀이2
def solution(n):
return len([i for i in range(1,n+1,2) if n % i == 0])
- 이건 위 풀이를 한 줄로 만든 것 같다