https://www.acmicpc.net/problem/2018
109240 192 PyPy3
import sys
input = sys.stdin.readline
N = int(input())
ans = 1
# 숫자리스트를 따로 만들 필요 없이 상수로 시작
s = 1
e = 1
temp = 1
while e < N:
if temp == N:
# count를 올려줌
ans += 1
temp -= s
s += 1
elif temp < N:
e += 1
temp += e
elif temp > N:
temp -= s
s += 1
print(ans)
투포인터로 풀이
메모리 초과가 어디서 나나 했더니만 list(range(N))으로 따로 리스트를 작성했더니 나는 것이었다
백준에서 다른 사람의 풀이인데 등차수열을 활용한 풀이이다
N = int(input())
k = 0
ans = 0
while True:
k += 1
# 등차수열의 합 : 첫번째 항부터 n번째 항까지의 합
n = k * (k + 1) // 2
# 나머지 부분
t = N - n
# 기존 수를 넘어버리면 break
if t < 0:
break
# ?????
if t % k == 0:
ans += 1
print(ans)