본문 바로가기
🔅코딩테스트 공부🔅/❗백준

[백준] 2018 수들의 합(python)

by 윤무무 2023. 3. 3.

https://www.acmicpc.net/problem/2018

 

2018번: 수들의 합 5

어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 알고 싶어한

www.acmicpc.net

 

1. 난이도 실버5 (🥈) 

 

2. 문제 해결 방법

투 포인터를 이용해 문제를 해결했다. 투 포인터란 list를 순차적으로 접근할 때 start 와 end라는 두 점으로 각각 기록하는 알고리즘이다.

 

3. 내가 작성한 코드

 

Version1

n = int(input())

num = [i for i in range(1,n+1)]
interval_sum = 0
cnt = 0
end = 0

for start in range(n):
  while interval_sum < n and end < n:
    interval_sum += num[end]
    end+=1
  if interval_sum == n:
    cnt+=1
  interval_sum -= num[start]

print(cnt)

Version2

n = int(input())

interval_sum = 1
cnt = 1
end = 1
start = 1

while end != n:
  if interval_sum == n:
    cnt+=1
    end+=1
    interval_sum += end

  elif interval_sum > n:
    interval_sum -= start
    start+=1
  
  else:
    end+=1
    interval_sum+=end

print(cnt)

 

 

 

댓글