※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 21318번 문제인 피아노 체조이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/21318
21318번: 피아노 체조
피아노를 사랑하는 시은이는 매일 아침 피아노 체조를 한다. 시은이는 N개의 악보를 가지고 있으며, 1번부터 N번까지의 번호로 부른다. 각 악보는 1 이상 109 이하의 정수로 표현되는 난이도를
www.acmicpc.net
1 이상 N 미만의 정수 i에 대하여 arr[i]를 'i + 1번 악보보다 i번 악보가 어렵다면 1, 그렇지 않으면 0'로 정의하자. 이 때 각 쿼리가 요구하는 값은 배열 arr의 구간합으로 생각할 수 있다.
배열 arr이 업데이트되는 일이 없으므로 prefix sum 배열을 만들어 문제를 해결하자. 이를 구현할 때 N개의 악보를 살펴볼 때 살펴봐야 하는 arr값의 수는 N - 1개가 되므로 인덱스의 관리에 유의하자.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
int N, Q;
int arr[100001];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for (int i = 1; i <= N; i++) cin >> arr[i];
for (int i = 1; i < N; i++) {
if (arr[i] > arr[i + 1]) arr[i] = 1;
else arr[i] = 0;
arr[i] += arr[i - 1];
}
cin >> Q;
while (Q--) {
int L, R; cin >> L >> R;
cout << arr[R - 1] - arr[L - 1] << '\n';
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 6005 // C++] Cow Pinball (1) | 2024.02.05 |
---|---|
[BOJ 11909 // C++] 배열 탈출 (0) | 2024.02.04 |
[BOJ 16401 // C++] 과자 나눠주기 (0) | 2024.02.02 |
[BOJ 10565 // C++] Salary Inequity (1) | 2024.02.01 |
[BOJ 1888 // C++] 곰팡이 (0) | 2024.01.31 |