https://www.acmicpc.net/problem/2003
<코드>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
vector<int>v;
int cnt = 0;
for(int i=0;i<n;i++)
{
int num;
cin>>num;
v.push_back(num);
}
int sum =0;
int start = 0;
int end = 0;
while(1)
{
if(sum>m) sum -= v[start++];
else if(end == n) break;
else sum += v[end++];
if(sum==m) cnt++;
}
cout<<cnt<<'\n';
}
<풀이 과정>
이 문제는 연속된 수의 합이 m이 되는지 물어보는 문제이다 (하나도 가능하다)
일단은 벡터에 모든 수를 push해주고 index를 두개 만들어줘야 한다.(시작 인덱스, 종착 인덱스)
처음에 m(더해서 원하는 값)보다 작은 경우에는 값을 지속적으로 더해주면 되지만,
값이 m보다 커지면, 가장 앞에 인덱스부터 차근차근 빼줘야 한다. 왜냐하면 중간에 있는 인덱스에 해당하는 값을 빼준다면 연속된 값이 나올 수 없기 때문이다. 그리고 sum이 m이 되면 값을 cnt(개수)를 추가해주면 끝이다!
'PS > 브루트포스 알고리즘[Bruteforce]' 카테고리의 다른 글
백준 2503 숫자 야구(c++) (0) | 2022.10.19 |
---|---|
백준 1526 가장 큰 금민수(c++) (0) | 2022.10.19 |
백준 2303 숫자 게임(c++) (0) | 2022.10.15 |
백준 2851 슈퍼 마리오(c++) (1) | 2022.10.12 |
백준 1018 체스판 다시 칠하기(c++) (1) | 2022.09.20 |