Algorithm

[Algo] 백준 2018 수들의 합 5 JAVA

조핑구 2024. 5. 8. 13:35

문제 바로가기 : https://www.acmicpc.net/problem/2018

메모리 : 14176KB

시간 : 164ms

언어 : Java 11


코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int left = 1;
        int right = 1;
        int cnt = 0;
        int sum = 1;
        while (left <= N) {
            if (sum == N) {
                cnt++;
                sum += ++right;
            } else if (sum < N) {
                sum += ++right;
            } else if (sum > N) {
                sum -= left++;
            }
        }
        System.out.println(cnt);
    }
}

풀이

무난한 그리디 문제. 슬라이딩 윈도우 연속된 수의 합을 구해야 하기 때문에 왼쪽 끝과 오른쪽 끝을 상정하여 하나씩 옮겨가면서 그 안의 합이 N인지 검사하면 된다.