백준 BOJ 2018 수들의 합 5

https://www.acmicpc.net/problem/2018

파이썬 python 문제 풀이



문제

어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 알고 싶어한다. 이때, 사용하는 자연수는 N이하여야 한다.

예를 들어, 15를 나타내는 방법은 15, 7+8, 4+5+6, 1+2+3+4+5의 4가지가 있다. 반면에 10을 나타내는 방법은 10, 1+2+3+4의 2가지가 있다.

N을 입력받아 가지수를 출력하는 프로그램을 작성하시오.



입력

첫 줄에 정수 N이 주어진다.



출력

입력된 자연수 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 출력하시오



풀이

# 2018 수들의 합 5
# 실버 5
 
import sys
 
n = int(sys.stdin.readline())
end = 0
sum = 0
count = 0
 
for start in range(0, n):
    while sum < n and end < n :
        sum += end+1
        end += 1
    if sum == n:
        count += 1
    sum -= start+1
 
print(count)
 
  • 투포인터 알고리즘
  1. 시작점과 끝점이 첫 번째 원소의 인덱스를 가리키게 한다.
  2. 현재 부분 합이 n이면 count 증가, start 증가
  3. 현재 부분 합이 n보다 크면 start 증가
  4. 현재 부분 합이 n보다 작으면 end 증가
  5. 2번부터 4번까지의 절차 반복