백준 문제

백준 2018(수들의 합 5) JAVA <투 포인터>

kangyuseok 2023. 7. 10. 15:34
728x90

문제

 

2018번: 수들의 합 5

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

www.acmicpc.net

n이 주어지면 1 ~ n 까지의 연속된 수들의 합이 n인 경우의 수를 구하는 것입니다.

예를 들어 n = 15이면 {1, 2, 3, 4, 5}, {456}, {7, 8}, {15} 

총 4가지 입니다.

투포인터를 사용했습니다.

import java.util.Scanner;

public class boj_2018 {
    public static void main(String[] args) {
        Scanner sc  = new Scanner(System.in);

        int n = sc.nextInt();


        int l =1, r =1;
        int sum =0;
        int cnt = 0;
        while(l <= r && r<=n){
            if(sum <n)sum += r++;
            else{
                if(sum == n)cnt++;
                sum -=l++;
            }
        }
        System.out.println(cnt + 1); //자기 자신 답 포함
    }
}