백준 2018번: 수들의 합 5 [python]

kimminjunnn·2025년 6월 19일

알고리즘

목록 보기
83/311

난이도 : 실버 5
유형 : 투포인터
https://www.acmicpc.net/problem/2018


문제 접근

N을 입력 받고,
그 N을 '연속된 자연수의 합' 으로 나타낼 수 있는 경우의 수가 몇가지 있는지 출력하는 문제이다.

15 의 경우
15
7+8
4+5+6
1+2+3+4+5
이렇게 네개가 존재 한다.


start와 end 포인터를 생성하고 start부터 end까지의 합 SUM 변수를 만든다.
SUM과 목표숫자 N의 크기에 따라 start와 end 포인터를 조정해가며 answer의 개수를 늘린다.

해답 및 풀이

import sys
input = sys.stdin.readline

N = int(input()) # 목표 수

start = 1
end = 1
SUM = 1 # 구간 합
answer = 0 # 정답 개수

while (end != N):
    if (SUM == N):
        answer += 1
        end += 1
        SUM += end
    elif (SUM > N):
        SUM -= start
        start += 1
    else:
        end += 1
        SUM += end

print(answer)
startendSUM설명
111작다 → end+1, SUM=3
123작다 → end+1, SUM=6
136작다 → end+1, SUM=10
1410작다 → end+1, SUM=15
1515정답! → answer++, end+1=6, SUM=21
1621너무 크다 → start+1=2, SUM=20
2620너무 크다 → start+1=3, SUM=18
3618너무 크다 → start+1=4, SUM=15
4615정답! → answer++, end+1=7, SUM=22
... 계속
profile
Frontend Engineers

0개의 댓글