본문 바로가기
코딩테스트 파이썬/백준

수들의 합 5 ( 2018 번 )

by 세용용용용 2025. 12. 30.

2018번: 수들의 합 5

 


🧠 알고리즘

  • 투 포인터(Two Pointers)

 

✔️ 동작 방식

[ 핵심 아이디어 ]

  • 연속된 자연수의 합은 왼쪽 ~ 오른쪽 까지 구간 합으로 표현할 수 있다
  • 합(num)이 N보다 작으면 → 오른쪽 확장, N보다 크거나 같으면 → 왼쪽 축소

[ 로직 요약 ]

  1. l, r는 연속된 자연수 구간의 시작과 끝 포인터
  2. num은 현재 구간의 합
  3. r > N이 되면 더 이상 합이 커질 수 없으므로 종료
  4. 누적된 answer가 정답

 

🧾 코드

import sys

def _main():
    answer = 0
    l, r, num = 1, 1, 0

    while l <= r:
        if num < n:
            if r > n:
                break
            num += r
            r += 1
        elif num >= n:
            if num == n:
                answer += 1
            num -= l
            l += 1
            
    return answer
    

n = int(sys.stdin.readline().rstrip())
print(_main())

 

⏱️ 시간 복잡도

while l <= r : 각 포인터는 최대 N까지 한 번씩만 이동 ( 선형 시간 )

해당 알고리즘 시간 복잡도 : 선형 시간 복잡도 ( O(n) )

'코딩테스트 파이썬 > 백준' 카테고리의 다른 글

랜선 자르기 ( 1654 번 )  (0) 2026.01.01
좋다 ( 1253 번 )  (0) 2026.01.01
열쇠 ( 9328 번 )  (0) 2025.12.05
외판원 순회 ( 2098 번 )  (0) 2025.11.24
팰린드롬 분할 ( 1509 번 )  (0) 2025.11.23