๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ProgramSolve/Baekjoon

[BOJ] 1806๋ฒˆ - ๋ถ€๋ถ„ํ•ฉ (Java)

by SooooooooS 2023. 12. 12.
728x90

๐Ÿ› ๏ธ ๋ฌธ์ œ ๐Ÿ› ๏ธ


๐Ÿ—’๏ธ ์„ค๋ช… ๐Ÿ—’๏ธ

start : ํ˜„์žฌ ๋ˆ„์ ํ•ฉ์˜ ์‹œ์ž‘ ์ธ๋ฑ์Šค
end : ํ˜„์žฌ ๋ˆ„์ ํ•ฉ์˜ ๋ ์ธ๋ฑ์Šค
sum : nums[start] + .... + nums[end] ์˜ ํ•ฉ

sum ์ด s ์ด์ƒ์ด๋ฉด (end - start + 1) ์ˆ˜์—ด์˜ ๊ธธ์ด ๋น„๊ต
sum์ด s ์ดˆ๊ณผ์ด๋ฉด start++ ํ•˜์—ฌ sum ๊ฐ์†Œ์‹œํ‚ค๊ธฐ
์•„๋‹ˆ๋ฉด end++ ํ•˜์—ฌ sum ์ฆ๊ฐ€์‹œํ‚ค๊ธฐ
๋‹จ, end == n์ด ๋˜๋Š” ์ˆœ๊ฐ„ ๋ฐฐ์—ด์˜ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด๊ฐ”๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋‹จํ•ด์ฃผ๊ธฐ!

 

์œ„์˜ ์„ค๋ช…์„ ๋‚˜์˜ ํ’€์ด์ด๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ end๊ฐ€ n์ด ๋˜๋Š” ์ˆœ๊ฐ„์˜ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์ž˜๋ชปํ•ด์„œ ๊ณ„์† ํ‹€๋ ธ์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด๋ฅผ ์ฐธ๊ณ ํ•˜๋‹ค ๋ณด๋‹ˆ ๋‚˜์™€ ๋‹ค๋ฅธ ์ ์ด ์žˆ์–ด์„œ ์ด๋ฅผ ๊ธฐ๋กํ•˜๋‹ค.

 

๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด์—์„œ๋Š” 

start๋ถ€ํ„ฐ end-1 ์ธ๋ฑ์Šค๊นŒ์ง€์˜ ํ•ฉ์„ ๋ˆ„์ ํ•ฉ์œผ๋กœ ๋ณด์•˜๋‹ค.

๊ทธ๋ž˜์„œ ์ด๋•Œ ํ•„์š”ํ•œ ์ฒ˜๋ฆฌ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ˆ˜์—ด์˜ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ n์ด ์•„๋‹Œ n+1๋กœ ์„ ์–ธํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

5 15
1 2 3 4 20

 

์œ„์™€ ๊ฐ™์ด ์ž…๋ ฅ์ด ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ ์ •๋‹ต์€ 1์ด๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋งŒ์•ฝ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ n์œผ๋กœ ์„ ์–ธํ•˜๋ฉด ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค ๊ฐ’๊นŒ์ง€ ํƒ์ƒ‰์„ ํ•  ์ˆ˜ ์—†์–ด 0์œผ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

์ฆ‰, start๊ฐ€ 4์— ์žˆ์œผ๋ฉด end๋Š” 5์— ์žˆ์–ด์•ผ ๋ˆ„์ ํ•ฉ์ด 20์ด ๋˜๊ธฐ๋•Œ๋ฌธ์ด๋‹ค.

 

๊ทธ๋ž˜์„œ ์ฒ˜์Œ์—๋Š” ๋‚˜๋„ ์œ„์™€ ๊ฐ™์ด ์ฒ˜๋ฆฌ๋ฅผ ์•ˆํ•ด์ฃผ์–ด์„œ ํ‹€๋ ธ๋‚˜ ํ•ด๋ณด์•˜๋Š”๋ฐ ๋‚˜์—๊ฒŒ๋Š” ์˜ฌ๋ฐ”๋ฅธ ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹ˆ์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค.

 

์šฐ์„  ๋ฌธ์ œ๋ฅผ ๊ผผ๊ผผํžˆ ๋ณด๊ณ  ๋‚˜์˜ ์ƒํ™ฉ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ•ด ์ด๋ฅผ ํ•ด๊ฒฐํ•ด ๋‚˜๊ฐ€์•ผ๊ฒ ๋‹ค. 


๐Ÿ€ ํ’€์ด ๐Ÿ€

package Baekjoon;

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

public class TwoPointer1806 {
    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 s = Integer.parseInt(st.nextToken());

        int[] nums = new int[n];
        st = new StringTokenizer(br.readLine());
        for(int i = 0; i < n ; i++) {
            nums[i] = Integer.parseInt(st.nextToken());
        }

        System.out.println(minLength(nums, s));
    }

    public static int minLength(int[] nums, int target) {
        int answer = Integer.MAX_VALUE;

        int start = 0;
        int end = 0;
        int sum = nums[0];
        while(start < nums.length && end < nums.length) {
            if(sum >= target) {
                answer = Math.min(answer, end - start + 1);
            }
            if(sum > target) {
                sum -= nums[start];
                start++;
            }
            else {
                end++;
                if(end == nums.length) {
                    break;
                }
                sum += nums[end];
            }
        }
        
        if(answer == Integer.MAX_VALUE) {
            answer = 0;
        }
        return answer;
    }
}
728x90