on my way

[백준 2018번] 수들의 합 5 (Python3, 실버5) 본문

algorithm/Python

[백준 2018번] 수들의 합 5 (Python3, 실버5)

wingbeat 2025. 1. 13. 19:41
반응형

import sys
N = int(sys.stdin.readline())
start, end, total, result = 1, 1, 1, 0

while end <= N:
    if total == N:
        result += 1
        end += 1
        total += end
    elif total < N:
        end += 1
        total += end
    else:
        total -= start
        start += 1

print(result)

 

start부터 end까지 투포인터로 부분합이 N인지 확인한다.

0. start, end는 모두 1에서 시작. total 1은 초기값이다. result는 0부터 시작.

1. total == N 이면 result++, end+=1, total에 end를 더한다

2. total이 N 미만이면, end+=1, total에 end를 더한다.

3. total이 N 이상이면, total에 start를 빼고, start+=1

 

end 이동으로 구간을 확장시키고, 구간합에 더하고.

구간합에서 start를 빼고 start 이동으로 구간을 축소시킨다.

 

이 순서가 헷갈려서 처음에 헤맴.

반응형