๐Ÿ•๏ธ ICPC Sinchon/Two Pointer

[BOJ][C++] ๋ฐฑ์ค€ 15565๋ฒˆ: ๊ท€์—ฌ์šด ๋ผ์ด์–ธ

์„ ๋‹ฌ 2024. 8. 29. 02:41
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/15565

 

๋ฌธ์ œ

๊ฟ€๊ท€ ๋ผ์ด์–ธ ์ธํ˜•๊ณผ, ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฟ€๊ท€์ธ ์–ดํ”ผ์น˜ ์ธํ˜•์ด N๊ฐœ ์ผ๋ ฌ๋กœ ๋†“์—ฌ ์žˆ๋‹ค. ๋ผ์ด์–ธ ์ธํ˜•์€ 1, ์–ดํ”ผ์น˜ ์ธํ˜•์€ 2๋กœ ํ‘œํ˜„ํ•˜์ž. ๋ผ์ด์–ธ ์ธํ˜•์ด K๊ฐœ ์ด์ƒ ์žˆ๋Š” ๊ฐ€์žฅ ์ž‘์€ ์—ฐ์†๋œ ์ธํ˜•๋“ค์˜ ์ง‘ํ•ฉ์˜ ํฌ๊ธฐ๋ฅผ ๊ตฌํ•˜์—ฌ๋ผ.

์ž…๋ ฅ

์ฒซ ์ค„์— N๊ณผ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ K ≤ N ≤ 106)

๋‘˜์งธ ์ค„์— N๊ฐœ์˜ ์ธํ˜•์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ๋˜๋Š” 2)

์ถœ๋ ฅ

K๊ฐœ ์ด์ƒ์˜ ๋ผ์ด์–ธ ์ธํ˜•์„ ํฌํ•จํ•˜๋Š” ๊ฐ€์žฅ ์ž‘์€ ์—ฐ์†๋œ ์ธํ˜•๋“ค์˜ ์ง‘ํ•ฉ์˜ ํฌ๊ธฐ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๊ทธ๋Ÿฐ ์ง‘ํ•ฉ์ด ์—†๋‹ค๋ฉด -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์•„๋‹Œ ๋ฐฑ์ค€์— ๋ผ์ด์–ธ ๋‚˜์™€๋„ ๋˜๋Š”๊ฑฐ์ž„?

์ „ํ˜•์ ์ธ ํˆฌํฌ์ธํ„ฐ ๋ฌธ์ œ

๋‹จ ํฌ์ธํ„ฐ๋ฅผ ์›€์ง์ด๋ฉด์„œ ์—ฐ์‚ฐํ•  ๋•Œ ๋”ํ•˜๊ธฐ์™€ ๋นผ๊ธฐ๋ฅผ ์กฐ๊ฑด์— ๋งž๊ฒŒ ์ž˜ ํ•ด์•ผํ•˜๋‹ˆ ์ฃผ์˜ํ•˜์ž

// ํ’€์ด : https://whkakrkr.tistory.com

#include <iostream>
#include <vector>

using namespace std;

int main() {
    int n, k;
    cin >> n >> k;
    vector<int>v(n);
    for(int i=0; i<n; i++) {
        cin >> v[i];
    }
    
    int left=0, right=0;
    int cnt = v[left]==1 ? 1 : 0;
    int ans = n+1;
    while(left<=right && right<n) {
        if(cnt>=k) {
            ans = min(ans, right-left+1);
            cnt -= v[left]==1 ? 1 : 0;
            left++;
        } else {
            right++;
            cnt += v[right]==1 ? 1 : 0;
        }
    }
    
    if(ans==n+1) {
        ans = -1;
    }
    cout << ans;
    
    return 0;
}
๋ฐ˜์‘ํ˜•