프로그래머스 레벨2[정답율 73%]
❓문제
❗문제 정리
사용한 파라미터:
n(int) : 입력받은 자연수 n
count(int) : 표현할 수 있는 방법 수
sum(int) : 누적값
📑코드
def solution(n):
count=1
for i in range(1, n//2+1):#연속할 수 있는 수가 n의 반절+1을 넘어가지 않음
sum=0#여기에 i가 변할때마다 누적값달라짐
while sum<n:
sum+=i
i+=1
if sum==n:
count+=1
return count
📝코드 설명
for i in range(1, n//2+1):#연속할 수 있는 수가 n의 반절+1을 넘어가지 않음
sum=0#여기에 i가 변할때마다 누적값달라짐
while sum<n:
sum+=i
i+=1
연속한 자연수로 표현하는 수는 n의 반절을 넘지 않음. 예를들어, 15//2=7로 7+8=15임.
999//2=333으로, 332+333+334=999로 표현이 가능함.
따라서, 1부터 n의 반절까지 for문으로 누적할 수의 반복하여 범위 설정함.
내부에 while을 넣어 누적값 sum이 n보다 작을 때까지 수를 누적하여 sum에 저장
if sum==n:
count+=1
return count
sum이 n보다 같거나 크게 되면 while문을 나와서 sum과 n이 같은지 검사하고 맞다면, count+1을하여 자연수로 표현하는 방법의 수를 늘림.
🎖제출 결과
💡insight
등차수열의 합 공식을 이용하면 가능하나, 등차 수열을 이해하지 못했다,,
def expressions(num):
return len([i for i in range(1,num+1,2) if num % i is 0])