[BOJ] 2003. ์ˆ˜๋“ค์˜ ํ•ฉ2 (๐Ÿฅˆ, ํˆฌ ํฌ์ธํ„ฐ)

lemythe423ยท2023๋…„ 12์›” 14์ผ
0

BOJ ๋ฌธ์ œํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
86/133
post-thumbnail

๐Ÿ”—

ํ’€์ด

ํˆฌ ํฌ์ธํ„ฐ๋กœ ํ’€์ดํ–ˆ๋‹ค. 2๊ฐœ์˜ ํฌ์ธํ„ฐ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ , p1 ~ p2๊นŒ์ง€์˜ ๊ฐ’์„ ๋ชจ๋‘ ํ•ฉํ•œ ๊ฐ’์„ sum ์— ์ €์žฅํ•˜๊ฒŒ ๋˜๋Š”๋ฐ p1๊ณผ p2๋ฅผ ์ ๋‹นํžˆ ์กฐ์ ˆํ•ด์„œ ๋ชฉํ‘œ๊ฐ’์„ ๋งž์ถœ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋ช‡๊ฐœ๋‚˜ ๋˜๋Š”์ง€ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋‹ค.

์‹œ์ž‘์€ p1๊ณผ p2์˜ ์œ„์น˜๊ฐ€ ๋™์ผํ•˜๋‹ค. ๋ชจ๋“  ์ˆ˜๋Š” ์ž์—ฐ์ˆ˜์ด๋ฏ€๋กœ ํ•ฉ์€ 0๋ณด๋‹ค ๋‚ฎ์„ ์ˆ˜ ์—†๋‹ค. sum์ด ํ•ด๋‹น ๋ชฉํ‘œ๊ฐ’๋ณด๋‹ค ์ž‘์€ ๊ฐ’์ด๋ผ๋ฉด p2์— ์žˆ๋Š” ๊ฐ’์„ ๋”ํ•˜๊ณ  p2๋ฅผ 1์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

์ด์ œ sum์€ 1์ด ๋๋‹ค. ํ•˜์ง€๋งŒ ๋ชฉํ‘œ๊ฐ’์ธ 2๋ณด๋‹ค๋Š” ์ž‘๋‹ค. ๋‹ค์‹œ p2์— ์žˆ๋Š” ๊ฐ’์„ ๋”ํ•œ๋‹ค.

์ด์ œ sum์€ ๋ชฉํ‘œ๊ฐ’์ด ๋˜์—ˆ๋‹ค. answer๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ์ฃผ๊ฒŒ ๋œ๋‹ค.

ํ•ด๋‹น ํ•ฉ์ด ๋ชฉํ‘œ๊ฐ’์— ๋„๋‹ฌํ•˜๊ฒŒ ๋˜๊ฑฐ๋‚˜, ๊ทธ ๊ฐ’์„ ๋„˜์–ด์„œ๊ฒŒ ๋˜๋ฉด ์†ํ•˜๋Š” ๊ฐ’๋“ค์„ ๋นผ์ค˜์•ผ ํ•œ๋‹ค. ์ด๋•Œ p1์„ ์ด์šฉํ•œ๋‹ค. p1์— ์žˆ๋Š” ๊ฐ’์„ ๋นผ์ฃผ๊ณ  p1์„ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

ํ•ด๋‹น ๊ณผ์ •์€ p2์˜ ๊ฐ’์ด ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ๋„˜์–ด์„œ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ sum์ด ๋ชฉํ‘œ๊ฐ’๋ณด๋‹ค ์ž‘์„ ๋•Œ๊นŒ์ง€ ์ง„ํ–‰๋œ๋‹ค. ๋ชฉํ‘œ๊ฐ’๋ณด๋‹ค ํฌ๋‹ค๋ฉด p1์„ ์ฆ๊ฐ€์‹œ์ผœ์„œ ๊ณ„์† ๋นผ์ฃผ๋ฉด ๋˜์ง€๋งŒ ๋ชฉํ‘œ๊ฐ’๋ณด๋‹ค ํฌ๋ฉด p2์„ ๊ณ„์† ์ฆ๊ฐ€์‹œ์ผœ์•ผ ํ•˜๋Š”๋ฐ ์ด๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋ฉฐ ๋” ์ฆ๊ฐ€์‹œ์ผœ๋ดค์ž ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

package Baekjoon.Silver;

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        st = new StringTokenizer(br.readLine(), " ");
        int[] arr = new int[N];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }

        int p1 = 0; int p2 = 0;
        int sum = 0;
        int answer = 0;

        while (!(sum < M && p2 >= N)) {
            if (sum == M) answer++;
            
            if (sum >= M) {
                sum -= arr[p1];
                p1++;
            } else {
                sum += arr[p2];
                p2++;
            }
            System.out.println(p1 + " " + p2 + " " + sum);
        }
        System.out.println(answer);
    }
}
profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€