백준 2018 - 수들의 합5

김예림·2025년 5월 5일

문제 파악

자연수 N을 몇 가지 방법의 연속된 자연수 합으로 나타낼 수 있는지를 구하는 문제
투포인터를 사용해 왼쪽과 오른쪽 포인터가 같이 1부터 시작해 만약 합이 N보다 작으면 오른쪽 포인터를 늘리고 N보다 크면 왼쪽 포인터를 늘려서 구할 수 있을 것이다. -> 이렇게 하면 연속된 자연수로만 합을 구할 수 있다.

풀이

  1. 입력 받을 것이 하나뿐이니 스캐너를 이용해 자연수 N을 입력받는다.
  2. 투포인터를 지정한다.
    a. 왼쪽 포인터 - 1부터 시작
    b. 오른쪽 포인터 - 1부터 시작
  3. 투포인터 수행
    a. 만약 누적합이 N보다 크면 왼쪽 포인터 늘려 누적합 줄여주기
    b. 만약 누적합이 N보다 작으면 오른쪽 포인터 늘려 누적합 늘려주기
    c. 누적합이 N이 되었을 때 카운트 늘려주기
    d. 방법 여러 개 찾기

코드

import java.util.Scanner;

public class 수들의_합_5 {

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

        int N = sc.nextInt();

        //투포인터 지정
        int start = 1;
        int end = 1;
        //누적합이어야 하기 때문에 따로 선언
        int sum = 1;
        int count = 0;

        //왼쪽 포인터까 N이 될때까지지
        while (start <= N) {
            //누적합이 N보다 크면 start 부분을 빼줌
            if (sum > N) {
                sum = sum - start;
                start++;
            } 
            //누적합이 N보다 작으면 end 하나 늘리고 더해줌
            else if (sum < N) {
                end++;
                sum = sum + end;
            }
            //누적합이 N이면 count를 늘려주고
            else {
                count++;
                //방법을 여러개 찾기 위해 end를 또 늘려줌
                end++;
                //누적합도 늘려주기
                sum = sum + end;
            }
        }
        System.out.println(count);
    }
}

0개의 댓글