Code/Python

[Python] 백준 2018번 수들의 합 5

ki1111m2 2023. 9. 25. 16:06

투 포인터를 활용한 문제

start와 end 포인터를 이용해서 문제를 해결했다.

 

합이 n과 같다면 cnt++을 한 후 end++

합이 n보다 크다면 합에서 start 값을 빼준 후 start++

합이 n보다 작다면 end++ 후 sum에 값 더하기

 

sum에 더하는게 먼저인지 end++이 먼저인지 판단하는게 중요한 듯하다.

# 수들의 합 5
# 어떠한 자연수 N은 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 이 N에 대해서 몇 개의 연속된 자연수의 합으로 나타낼 수 있는지 가지수를 알고 싶다.
# 첫 줄에 정수 N이 주어진다. 가지수를 출력하시오.

n = int(input())
start = 1
end = 1
sum = 1
cnt = 1

while end != n:
    if sum == n:
        cnt += 1
        end += 1
        sum += end
    elif sum > n:
        sum -= start
        start += 1
    else:
        end += 1
        sum += end

print(cnt)