[백준/S5] 2018 수들의 합5

foresec·2024년 3월 13일

백준

목록 보기
7/23

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)
profile
왼쪽 태그보다 시리즈 위주로 구분

0개의 댓글