본문 바로가기

코딩테스트/백준

[백준-자바] 2018번 수들의 합 5 / 2022.05.21

 

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

 

2018번: 수들의 합 5

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

www.acmicpc.net

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader((new InputStreamReader(System.in)));
        StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
        int N = Integer.parseInt(stringTokenizer.nextToken());
        int count = 1; // count가 1인 이유는 end가 N일 때를 미리 고려한 것
        int sum = 1;
        int start = 1;
        int end = 1;
        while(end!=N){
            if(sum==N){ // sum과 N이 같다면
                count++; // count + 1
                end++; // end 옆으로 이동 
                sum = sum+end; // end 이동했으므로 합이 커짐
            } else if(sum > N){ // sum이 N보다 크다면
                sum = sum-start; // 값을 줄여줘야 하기 때문에 
                start++; // start 옆으로 이동
            } else{ // sum이 N보다 작다면
                end++; // 값을 더해줘야 하기 때문에
                sum = sum+end; // end 옆으로 이동
            }
        }
        System.out.println(count);
    }
}

 

풀이 :