투 포인터를 활용한 문제
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)
'Code > Python' 카테고리의 다른 글
[Python] 백준 12891번 DNA 비밀번호 (0) | 2023.09.26 |
---|---|
[Python] 백준 1940번 주몽 (0) | 2023.09.25 |
[Python] 백준 10986번 나머지 합 (1) | 2023.09.25 |
[Python] 백준 11660번 구간 합 구하기 5 (ps. 0으로 이루어진 리스트 만들기([[] * n] vs [[] for i in range])) (0) | 2023.09.23 |
[Python] 백준 11659번 구간 합 구하기 4 (0) | 2023.09.22 |