์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ
: ํฌํฌ์ธํฐ
๊ฒฝ๊ณ !
- ์์ธ์ฒ๋ฆฌ๋ฅผ ํ๋ํ๋ ์๊ฐํด๋๊ฐ๋ฉด์ ํ๋ฉด ์ฝ๊ฒ ํ ์ ์์.
![](https://velog.velcdn.com/images/kwt0124/post/865d7896-5779-45aa-beeb-65b4a7ef699c/image.png)
- start ๊ฐ end๋ณด๋ค ์์๊ฒ ๋๋ค๋ฉด. end๋ฅผ ๋์ผํ๊ฒ ๋ง๋ค์ด์ผ ํจ.
์ด๋ค ๊ฒฝ์ฐ๋๋ฉด
![](https://velog.velcdn.com/images/kwt0124/post/dda7cd83-0d52-4348-885c-0b33a565c2dd/image.png)
- ์ฌ๊ธฐ์์ 4 2 5 ๋ถ๋ถ ์ค 5๊ฐ 7์ด๋ผ๊ณ ํ๋ค๋ฉด, start๊ฐ end๋ณด๋ค ๋ค๋ก ๊ฐ์ ์๋ค.
์ด๋ ๊ฒ ๋๋ฉด ์์ผ๋ฌธ ๋๋จ.
ํน์ง
- start ์ end ๊ฐ์ด ๋์ผํ ๊ณณ์ ๊ฐ๋ฆฌํฌ ์ ์์.
์ด๋, end๋ง ์ฆ๊ฐ์ํค์.
์ํ๋ฌธ ๋๋ฉด์ start ์ฆ๊ฐ ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ ๋๋ฌธ์
ํ์ด์ ๋ต
- ๋ฐ๋์ , end ์ธ๋ฑ์ค๋ฅผ ์์์ ๋ถํฐ ์์ ํด์ผ ํจ.
- ํฉ ๊ณ์ฐํ๋ ค๋ ์ธ๋ฑ์ค์ ์๊ฐ ๋ง์์ง์๋ก, ๋
ผ๋ฆฌ์ ์ผ๋ก ํฉ์ด ์ปค์ง.
์ฃผ์ํ ์ .
- ๊ฐ ์กฐ๊ฑด๋ง๋ค, start์ end ์ธ๋ฑ์ค ๊ฐ์ด ์ฆ๊ฐํ๋๋ฐ, ๋ด๊ฐ ๋ง๋ ์ปจํ
์ด๋์
์ฌ์ด์ฆ๋ฅผ ๋ฒ์ด๋ ์ ์์. ์ด์ ๋ํ ์กฐ๊ฑด ์ฒ๋ฆฌ๋ฅผ ํด์ผํจ.
- start๊ฐ end๋ณด๋ค ๊ฐ์ด ์ปค์ง๋ ๊ฒฝ์ฐ๊ฐ ์์.
์ด๋ ํ ๊ฒฝ์ฐ๋? ํฉ์ ๊ตฌํ๋ ๊ฐ์ด๋ฐ ์์น์์ ์์ ํ๋๋ฅผ ๊ฐ์ง๊ณ ํ๊ฒ๊ฐ๊ณผ ๋น๊ต๋ฅผ ํ๋๋ฐ,
ํ๊ฒ๊ฐ๋ณด๋ค ํด ๊ฒฝ์ฐ, ์ฌ๊ธฐ์ ์๋ฌด์กฐ๊ฑด ์๋ค๋ฉด, ์์ผ๋ฌธ์์ ๋๋๋ฏ๋ก.
๊ณ์ ์งํํด์, ๊ฒฝ์ฐ์ ์๋ฅผ ์นด์ดํ
ํด์ค์ผํจ.
end๋ start์ ๋์ผํ๊ฒ ๋ง๋ค์ด์ผ ํจ.
- ์์ ํน์ง์ผ๋ก ์ธํด์ while๋ฌธ์ start <= end // ๋ฑํธ๋ ํฌํจ๋์ด์ผ ํจ.
![](https://velog.velcdn.com/images/kwt0124/post/784ad7fc-84e7-4773-9289-ca5535a173e7/image.png)
์ฐ์ต_1. ๋ธ๋ฃจํธํฌ์ค ์ฐธ๊ณ
์ฝ๋
#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>
// 2003๋ฒ. ์๋ค์ ํฉ2
// 15:51 ~ 16:37
int main(void)
{
int n, m;
cin >> n >> m;
vector<int>v(n);
for (int i = 0; i < n; ++i)
{
cin >> v[i];
}
int start = 0;
int end = 0;
int sum = v[start];
int res = 0;
while (start <= end && end < v.size())
{
if (sum < m)
{
++end;
if (end >= n)
break;
sum += v[end];
}
else if (sum == m)
{
++res;
++end;
if (end >= n)
break;
sum += v[end];
}
else if (sum > m)
{
sum -= v[start];
++start;
// start์ ๋ํ ์กฐ๊ฑด์ ์ฒ๋ฆฌํด์ผ ํจ.
// ์ด๋ฐ ์๊ฐ์ ํ ์ ์์.
// ๊ฐ์ด๋ฐ์์ start์ end๊ฐ ๋์ผํ๋ฐ,
// start๋ฅผ ์ฆ๊ฐํ ๊ฒฝ์ฐ.
// ๊ทธ๋ฌ๋๊น ์
๋ ฅ 2๋ฒ์ ํด๋นํจ.
// ๋ท๋ถ๋ถ์ ์ธ๋ฑ์ค๋ ์งํ์ ํด์ผํจ.
if (start > end)
{
end = start;
sum = v[start];
}
}
}
cout << res;
}