티스토리 뷰
반응형
https://www.acmicpc.net/problem/11659
11659번: 구간 합 구하기 4
첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j
www.acmicpc.net
⊙ 문제
⊙ 입력
⊙ 출력
⊙ 예제 입출력
⊙ 알고리즘 분류
- 누적 합
⊙ 문제 접근 과정
누적 합 문제다.
처음엔 구현으로 풀라고 했다. 이중 for문을 사용하니 시간 복잡도가 O(N^2)이고 N과 M이 100,000까지라 시간 초과를 만날 수 있었다.
누적 합 문제의 해결법은 값을 배열에 넣고, 그 배열의 값들을 누적합 값으로 갱신시켜주어 index로 접근하여 구해주면 된다.
⊙ 문제 풀이
#include <iostream>
using namespace std;
#define MAX 100001
int N, M;
int arr[MAX];
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M;
//배열 입력 받기
for(int i=0;i<N;i++)
cin >> arr[i];
//배열을 누적합로 변경
for(int i=1;i<=N;i++)
arr[i]+=arr[i-1];
//구간 입력 받고 누적 합 출력
for(int i=0;i<M;i++) {
int x, y;
cin >> x>> y;
cout << arr[y-1]-arr[x-2] << "\n";
}
}
⊙ 결과
⊙ 마무리
NONE
하트 누르면 위 내용 전부 기억함
728x90
반응형
'백준 온라인 저지 [BOJ] > C++ [CPP]' 카테고리의 다른 글
[백준(BOJ)] 14888번 : 연산자 끼워넣기 - C++[CPP] (0) | 2021.10.10 |
---|---|
[백준(BOJ)] 3052번 : 나머지 - C++[CPP] (0) | 2021.08.30 |
[백준(BOJ)] 10951번 : A+B - 4 - C++[CPP] (0) | 2021.08.28 |
[백준(BOJ)] 14503번 : 로봇 청소기 - C++[CPP] (0) | 2021.08.27 |
[백준(BOJ)] 1475번 : 방 번호 - C++[CPP] (0) | 2021.08.26 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 쉽게 배우는 자바 프로그래밍
- 운영체제
- 풀이
- Python
- 그리디
- 해답
- 우종정
- 파이썬
- 구현
- BFS
- 문자열
- 쉽게배우는자바프로그래밍
- OS
- CPP
- py
- 자바스크립트
- C++
- 정렬
- 정답
- 쉽게배우는
- 답
- 정리
- Web
- java
- 백준
- JS
- 자바
- 알고리즘
- 연습문제
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함