운기의 블로그
백준 - 2003번 수들의 합 2 본문
접근방식
연속된 합을 구하기 위해 이중 포문을 사용하기로 결정했다.
이중 포문을 사용하기전에 N의 값이 10,000개라 시간초과에 대한 위험이 있을 수 있다고 생각했지만,
적절하게 for문안에 break를 사용하면 시간초과는 나지 않을거라고 판단하고 진행했다.
코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
int m;
int count = 0;
cin >> n;
cin >> m;
vector<int> v;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
v.push_back(x);
}
for (int i = 0; i < n-1; i++) {
int x = v[i];
if (x == m) {
count++;
continue;
}
for (int j = i+1; j < n; j++) {
x = x + v[j];
if (x == m) {
count++;
break;
}
if (x > m) {
break;
}
}
}
int last = v.back();
if (last == m) {
count++;
}
cout << count;
return 0;
}
풀이 방법
예시를 가지고 설명하자면,
4, 2
1, 1, 1, 1
맨 처음 for문은 0부터 마지막 원소 전까지
두번 째 for 문은 처음 for문의 +1 부터 시작해서 마지막 원소 까지로 잡았다.
이렇게 되면 맨 마지막 값이 m의 값인 2와 같은지 확인하지 못하기 때문에
이중 포문이 끝나면 마지막 원소값만 m과 같은지 확인하는 절차를 넣어주었다.
이 방법 보다는 투 포인터 방법이 더 좋은거 같다.
'알고리즘' 카테고리의 다른 글
프로그래머스 - 메뉴 리뉴얼 (0) | 2022.09.13 |
---|---|
프로그래머스 - 신규 아이디 추천 (0) | 2022.09.06 |
백준 - 2096 내려가기 (0) | 2022.07.02 |
백준 - 2748번 피보나치 수 2 (0) | 2022.07.01 |
백준 - 1806 부분합 (0) | 2022.07.01 |