πŸ“¦1806: Subtotal


[μ•Œκ³ λ¦¬μ¦˜ 풀이] κ°•λ™κ·œ
Reviewed by Kade Kang (devkade12@gmail.com)
Reviewed:: 2024-02-19
문제 ν™•μΈν•˜κΈ°

풀이

  • 이쀑 for 문을 μ‚¬μš©ν•  경우 sum 을 μ²˜μŒλΆ€ν„° μƒˆλ‘œ λ”ν•΄κ°€λ©΄μ„œ ꡬ해야 ν•˜κΈ° λ•Œλ¬Έμ— μ‹œκ°„μ΄ˆκ³Όκ°€ λ°œμƒν•œλ‹€.
  • λ•Œλ¬Έμ— sum, λˆ„μ ν•©μ„ κ°±μ‹ ν•΄μ€˜μ•Ό ν•œλ‹€.
  • start, end κ°€ 0 λΆ€ν„° μ‹œμž‘ν•΄μ„œ start λŠ” end κΉŒμ§€, end λŠ” N κΉŒμ§€λ‘œ λ²”μœ„λ₯Ό μ§€μ •ν•œλ‹€.
  • 이 μ•ˆμ—μ„œ λͺ©ν‘œκ°’κΉŒμ§€ λ„λ‹¬ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ end λ₯Ό 늘렀 λͺ©ν‘œκ°’을 λ„˜κΈΈ 수 μžˆλ„λ‘ λ§Œλ“€κ³  λͺ©ν‘œκ°’에 λ„λ‹¬ν•˜λ©΄ start λ₯Ό 늘렀 μ΅œμ†Œ λ²”μœ„λ₯Ό 찾을 수 μžˆλ„λ‘ ν•œλ‹€.
#include <iostream>
 
#define endl '\n'
using namespace std;
 
int N, S;
int arr[100001];
int res, sum=0;
 
void Input(){
    cin >> N >> S;
    for(int i=0; i<N; i++){
        cin >> arr[i];
    }
}
 
void Solution(){
    res = INT32_MAX;
    sum = arr[0];
    int start = 0;
    int end = 0;
    while(start <= end && end < N){
        if(sum >= S) res = min(res, end-start+1);
        if(sum < S){
            end++;
            sum += arr[end];
        }
        else{
            sum -= arr[start];
            start++;
        }
    }
    if(res == INT32_MAX) cout << 0 << endl;
    else cout << res << endl;
}
 
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
 
    Input();
    Solution();
 
    return 0;
}