[백준 11441] 합 구하기
문제 출처 : https://www.acmicpc.net/problem/11441
문제
N개의 수 A1, A2, ..., AN이 입력으로 주어진다. 총 M개의 구간 i, j가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 수의 개수 N이 주어진다. (1 ≤ N ≤ 100,000) 둘째 줄에는 A1, A2, ..., AN이 주어진다. (-1,000 ≤ Ai ≤ 1,000) 셋째 줄에는 구간의 개수 M이 주어진다. (1 ≤ M ≤ 100,000) 넷째 줄부터 M개의 줄에는 각 구간을 나타내는 i와 j가 주어진다. (1 ≤ i ≤ j ≤ N)
출력
총 M개의 줄에 걸쳐 입력으로 주어진 구간의 합을 출력한다.
예제 입력
1 2 3 4 5 6 7 8 | 5 10 20 30 40 50 5 1 3 2 4 3 5 1 5 4 4 | cs |
1 2 3 4 5 | 60 90 120 150 40 | cs |
- 문제 이해하기
- 계획 및 문제 해결
1 2 3 4 | for (int i = 1; i <= line; i++) { cin >> v[i]; sum[i] = v[i] + sum[i - 1]; } | cs |
1 2 3 4 5 6 7 8 | int line2; cin >> line2; for (int j = 1; j <= line2; j++) { int start, end; cin >> start >> end; result[j] = sum[end] - sum[start - 1]; } | cs |
1 2 3 | for (int z = 1; z <= line2; z++) { cout << result[z] << endl; } | cs |
- 전체 소스 코드
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 32 33 34 35 36 | #include <iostream> #include <vector> using namespace std; int main() { int line; cin >> line; vector<int> v(100001); // 100000개를 저장하는 벡터 생성 vector<int> sum(line + 1); // 합계 저장할 벡터 생성 vector<int> result(100001); // 결과 출력 벡터 생성 for (int i = 1; i <= line; i++) { cin >> v[i]; sum[i] = v[i] + sum[i - 1]; } int line2; cin >> line2; for (int j = 1; j <= line2; j++) { int start, end; cin >> start >> end; result[j] = sum[end] - sum[start - 1]; } for (int z = 1; z <= line2; z++) { cout << result[z] << endl; } return 0; } | cs |
'Algorithm > 백준(BOJ)' 카테고리의 다른 글
[백준 1463] 1로 만들기 (0) | 2018.04.12 |
---|---|
[백준 1475] 방 번호 (0) | 2018.04.10 |
[백준 2292] 벌집 (0) | 2018.04.02 |
[백준 2438] 별찍기 - 1 (0) | 2018.03.31 |
[백준 2750] 수 정렬하기 (0) | 2018.03.29 |
[백준 11441] 합 구하기
문제 출처 : https://www.acmicpc.net/problem/11441
문제
N개의 수 A1, A2, ..., AN이 입력으로 주어진다. 총 M개의 구간 i, j가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 수의 개수 N이 주어진다. (1 ≤ N ≤ 100,000) 둘째 줄에는 A1, A2, ..., AN이 주어진다. (-1,000 ≤ Ai ≤ 1,000) 셋째 줄에는 구간의 개수 M이 주어진다. (1 ≤ M ≤ 100,000) 넷째 줄부터 M개의 줄에는 각 구간을 나타내는 i와 j가 주어진다. (1 ≤ i ≤ j ≤ N)
출력
총 M개의 줄에 걸쳐 입력으로 주어진 구간의 합을 출력한다.
예제 입력
1 2 3 4 5 6 7 8 | 5 10 20 30 40 50 5 1 3 2 4 3 5 1 5 4 4 | cs |
1 2 3 4 5 | 60 90 120 150 40 | cs |
- 문제 이해하기
- 계획 및 문제 해결
1 2 3 4 | for (int i = 1; i <= line; i++) { cin >> v[i]; sum[i] = v[i] + sum[i - 1]; } | cs |
1 2 3 4 5 6 7 8 | int line2; cin >> line2; for (int j = 1; j <= line2; j++) { int start, end; cin >> start >> end; result[j] = sum[end] - sum[start - 1]; } | cs |
1 2 3 | for (int z = 1; z <= line2; z++) { cout << result[z] << endl; } | cs |
- 전체 소스 코드
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 32 33 34 35 36 | #include <iostream> #include <vector> using namespace std; int main() { int line; cin >> line; vector<int> v(100001); // 100000개를 저장하는 벡터 생성 vector<int> sum(line + 1); // 합계 저장할 벡터 생성 vector<int> result(100001); // 결과 출력 벡터 생성 for (int i = 1; i <= line; i++) { cin >> v[i]; sum[i] = v[i] + sum[i - 1]; } int line2; cin >> line2; for (int j = 1; j <= line2; j++) { int start, end; cin >> start >> end; result[j] = sum[end] - sum[start - 1]; } for (int z = 1; z <= line2; z++) { cout << result[z] << endl; } return 0; } | cs |
'Algorithm > 백준(BOJ)' 카테고리의 다른 글
[백준 1463] 1로 만들기 (0) | 2018.04.12 |
---|---|
[백준 1475] 방 번호 (0) | 2018.04.10 |
[백준 2292] 벌집 (0) | 2018.04.02 |
[백준 2438] 별찍기 - 1 (0) | 2018.03.31 |
[백준 2750] 수 정렬하기 (0) | 2018.03.29 |