Algorithm/BAEKJOON

[Java] 2018 수들의 합 5

곽수진 2023. 4. 9. 20:01
반응형

문제

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

예를 들어, 15를 나타내는 방법은 15, 7+8, 4+5+6, 1+2+3+4+5의 4가지가 있다. 반면에 10을 나타내는 방법은 10, 1+2+3+4의 2가지가 있다.

N을 입력받아 가지수를 출력하는 프로그램을 작성하시오.

 

입력

첫 줄에 정수 N이 주어진다.

 

출력

입력된 자연수 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 출력하시오

 

import java.io.*;
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int Num = scanner.nextInt();
        int count = 1;
        int start = 1;
        int end = 1;
        int sum = 1;
        
        while(end != Num){
            if(sum == Num){
                count++;
                end++;
                sum += end;
            }
            else if(sum > Num){
                sum -= start;
                start++;
            }
            else{
                end++;
                sum += end;
            }
        }
        System.out.println(count);
    }
}

int Num = scanner.nextInt() : 사용자로부터 연속된 합 개수를 구할 자연수를 입력받아 Num 변수에 저장함

▶ int count = 1 : 자연수 그 자체 값 만으로도 해당되기 때문에, 이 경우를 배제하고자 count를 1로 초기화하고 시작함

 

int start = 1;
int end = 1;
int sum = 1;

▶ start 인덱스와 end 인덱스를 모두 1로 초기화 하고, 이로 인해 더한 값을 저장하는 sum 변수도 1로 초기화 함

 

while(end != Num){
    if(sum == Num){
        count++;
        end++;
        sum += end;
    }
    else if(sum > Num){
        sum -= start;
        start++;
    }
    else{
        end++;
        sum += end;
    }
}

end 인덱스의 값이 자연수 Num과 같지 않을 때까지 반복문을 돌리며 연속된 자연수를 더한 값이 Num과 같은 경우의 수를 계산함

자연수 Num = 6

 

1) 연속된 자연수의 합이 자연수 Num과 같은 경우에는 count 값을 하나 늘리고 end 인덱스 값을 하나 더 늘린 후 sum 값에 end 값을 더해 저장함

{1, 2, 3}을 더한 sum 값이 Num과 같기 때문에 count는 2로 늘어나고, end 값은 4, sum 값은 10이 됨

 

2) 연속된 자연수의 합이 자연수 Num보다 큰 경우에는 sum 값에 start 값을 뺀 후 저장하고 start 값을 하나 더 늘림

{1, 2, 3, 4}을 더한 sum 값이 Num보다 크기 때문에 sum 값은 10 - 1 = 9가 되고, start = 2가 됨

 

3) 연속된 자연수의 합이 자연수 Num보다 작은 경우에는 end 값을 하나 더 늘리고 sum 값에 end 값을 더한 후 저장함

{2, 3}을 더한 sum값이 Num보다 작기 때문에 end=4가 되고, sum 값은 5 + 4 = 9가 됨
반응형

'Algorithm > BAEKJOON' 카테고리의 다른 글

[Java] 1253 좋다  (0) 2023.04.12
[Java] 1940 주몽  (0) 2023.04.10
[Java] 10986 나머지 합  (0) 2023.04.08
[Java] 11660 구간 합 구하기 5  (0) 2023.04.07
[Java] 11659 구간 합 구하기 4  (0) 2023.04.05