-
백준 11441번 : 합 구하기 (C 언어)c c++ 언어 공부 2023. 6. 26. 15:32
https://www.acmicpc.net/problem/11441
11441번: 합 구하기
첫째 줄에 수의 개수 N이 주어진다. (1 ≤ N ≤ 100,000) 둘째 줄에는 A1, A2, ..., AN이 주어진다. (-1,000 ≤ Ai ≤ 1,000) 셋째 줄에는 구간의 개수 M이 주어진다. (1 ≤ M ≤ 100,000) 넷째 줄부터 M개의 줄에는
www.acmicpc.net
Code:
123456789101112131415161718192021222324252627#include <stdio.h>int main() {int n;int arr[100001] = { 0, };scanf("%d", &n);for (int i = 1; i <= n; i++){scanf("%d", &arr[i]);}int dp[100001] = { 0, };dp[0] = 0;dp[1] = arr[1];for (int i = 2; i <= n; i++){dp[i] = arr[i]+dp[i - 1];}int m;scanf("%d", &m);int a, b;while (m--){scanf("%d %d", &a, &b);printf("%d\n", dp[b] - dp[a-1]);}return 0;}cs 문제 설명: 주어진 문제는 N개의 수로 이루어진 배열과 M개의 구간을 가지고, 각 구간의 합을 구하는 프로그램을 작성하는 것입니다. 먼저, 입력으로 주어지는 수의 개수 N을 받고, 그 다음 줄에서는 N개의 수 A1부터 AN을 입력받습니다. 배열의 인덱스는 1부터 시작합니다. 그 다음 줄에는 구간의 개수 M을 입력받고, M개의 줄에는 각 구간을 나타내는 i와 j를 입력받습니다. 마지막으로, 각 구간의 합을 출력합니다.
코드 설명:
- 먼저, 주어진 수의 개수 N을 입력받고, N개의 수를 배열 arr에 저장합니다.
- 배열 arr의 부분합을 저장하기 위한 배열 dp를 선언하고, dp[0]을 0으로 초기화합니다.
- for 루프를 사용하여 dp[i] = arr[i] + dp[i-1]의 점화식을 이용해 dp 배열을 채웁니다. 이는 i번째 수까지의 부분합을 저장하는 것입니다.
- 구간의 개수 M을 입력받고, M번 반복하는 while 루프를 실행합니다.
- 각 구간의 시작과 끝을 나타내는 i와 j를 입력받고, dp[j] - dp[i-1]을 계산하여 해당 구간의 합을 출력합니다.
'c c++ 언어 공부' 카테고리의 다른 글
백준 2669번 : 직사각형 네개의 합집합의 면적 구하기 (C 언어) (0) 2023.06.28 백준 4344번 : 평균은 넘겠지 (C 언어) (0) 2023.06.27 백준 9613번 : GCD 합 (C 언어) (0) 2023.06.20 백준 2846번 : 오르막길 (C 언어) (0) 2023.06.20 백준 11728번 : 배열 합치기 (C 언어) (0) 2023.06.19