Algorithm & Problem Solving/투 포인터(Two Pointer)
[백준 2018] 수들의 합 5 (Python)
baby_ohgu
2020. 12. 26. 18:34
2018번: 수들의 합 5
어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 알고 싶어한
www.acmicpc.net
문제풀이
N : 입력값
arr : 배열(1부터 N)
start, end : 투 포인터를 위한 포인터
now : 현재까지 더한 값
투 포인터(start, end)를 이용하여 해결할 수 있다.
1. N을 입력하고 배열(arr)에 1부터 N까지의 값을 넣어준다.
2. end와 now를 이용하여 now가 N이상이 될 때 까지 now에 arr[end]를 더하고 end를 1 증가시키는 과정을 반복한다.
3. 2의 과정 후 now가 N이면 결과값(ans)를 1 증가시킨다.
4. now에서 현재까지 더한 값 중 가장 좌측에 위치한 arr[start]를 빼준다.
5. 2~4 과정을 start가 배열의 마지막에 도달할 때 까지 반복한다.
6. 결과(ans)를 출력한다.
코드
if __name__ == '__main__':
N = int(input())
arr = [i for i in range(1, N + 1)]
now, end = 0, 0
ans = 0
for start in range(N):
while end < N and now < N:
now += arr[end]
end += 1
if now == N:
ans += 1
now -= arr[start]
print(ans)
결과
문제풀이나 코드에서 이상한 부분 지적은 언제나 환영합니다!