N=int(input())
start=0
end=1
count=0
total=start+end
while start<end and end<N:
if total < N:
end+=1
total+=end
elif total>N:
total-=start
start+=1
else:
count+=1
end+=1
total+=end
print(count+1)
📌 N을 연속된 자연수의 합으로 나타내는 경우의 수를 어떻게 구할 것인가?
투 포인터로 풀 수 있다.
total 값을 정해두고 만약 total이 N보다 크면 start를 증가 시킨후 total 값을 감소한다.
만약 N보다 작으면 end 값을 증가시킨후 total 값을 증가시킨다.
예시로 N=6일때 1+2 까지 더했다면 total=3 값이 N보다 작기 때문에
end를 증가시킴으로써 1+2+3을 한다. 따라서 total==N이 성립한다.
반대로 N=9일때 1+2+3+4 까지 더했다면 total=10 값이 N보다 크기 때문에
start 값을 증가시킴으로써 2+3+4을 한다. 따라서 total==N이 성립한다.
✅ 코드에서 중요한 부분
start=0 ; end=1 로 잡는다.
total의 초기값은 1로 잡는다.
while 문에서 start<end로 잡는다. start와 end는 투포인터이기 때문에 같을수 없다. 또한 end<N으로 상한선을 잡는다.
만약 total<N일때 end값을 먼저 증가시킨후 total에 end를 더해준다.
만약 total>N일떄 start값을 먼저 증가시킨후 total에 start를 빼준다.
total==N이 성립할때 count를 증가시키고 start , end 모두 증가시킨다.
N이 자기자신의 경우도 포함하기 때문에 count+1을 출력한다.