link : https://www.acmicpc.net/problem/2003
수들의 합 2 성공
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
0.5 초 | 128 MB | 6353 | 2972 | 2212 | 51.586% |
문제
N개의 수로 된 수열 A[1], A[2], …, A[N] 이 있다. 이 수열의 i번째 수부터 j번째 수까지의 합 A[i]+A[i+1]+…+A[j-1]+A[j]가 M이 되는 경우의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N(1≤N≤10,000), M(1≤M≤300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다.
출력
첫째 줄에 경우의 수를 출력한다.
예제 입력 1
4 2 1 1 1 1
예제 출력 1
3
예제 입력 2
10 5 1 2 3 4 2 5 3 1 1 2
예제 출력 2
3
투 포인터 문제이다. 어려울게 하나도 없는 문제인데 처음에 몇번이고 틀렸다. 디버깅을 계속 하다보니 결국 맞았다.
잔실수를 줄여야겠다는 생각이 든 문제였다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #include<iostream> using namespace std; int N, M, ary, cnt; int sum[10001]; int main() { ios::sync_with_stdio(false); cin >> N >> M; for (int i = 1; i <= N; i++) { cin >> ary; sum[i] = sum[i - 1] + ary; } for (int i = 1; i <= N; i++) { for (int j = i; j <= N; j++) { if (sum[j] - sum[i - 1] == M) { cnt++; break; } } } cout << cnt; return 0; } | cs |
'Programming > BOJ Solutions' 카테고리의 다른 글
[백준 1922번] 네트워크 연결 (0) | 2018.08.21 |
---|---|
[백준 1717번] 집합의 표현 (0) | 2018.08.21 |
[백준 1893번] 시저 암호 (0) | 2018.08.09 |
[백준 15829번] Hashing (0) | 2018.08.07 |
[백준 2152번] 여행 계획 세우기 (2) | 2018.07.27 |